Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 88

Удаление дубликатов из массива словарей

08.08.2021, 23:42. Показов 4234. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день!

Пытаюсь удалить дубликаты по name и gender в словаре l
Python
1
l=[{'name': '2001', 'category': 5, 'gender': 'Ч', 'weights': '50;51;65'}, {'name': '1994-2020', 'category': 7, 'gender': 'Ч', 'weights': '50;51;65+'}, {'name': '1994-2020', 'category': 8, 'gender': 'Ч', 'weights': '50;51;65+'}, {'name': '1994-2020', 'category': 16, 'gender': 'Ч', 'weights': '50;51;65+'}, {'name': '1994-2020', 'category': 17, 'gender': 'Ч', 'weights': '50;51;65+'}]
Python
1
2
3
4
5
6
for i in range(len(l)-1):
        if l[i]['name']==l[i+1]['name'] and l[i]['gender']==l[i+1]['gender'] :
            l.pop(i)
 
 
    print('after Removing duplicate from list of dictionary =\n',l)
Но мне говорит что выход за пределы, если ставлю -2 то работает но последний элемент не проверяет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.08.2021, 23:42
Ответы с готовыми решениями:

Удаление дубликатов с массива
public void removeDups(){ int i=0; int dubl=a; for(i=1;i<nElements;i++){ if (a!=dubl) dubl=a; else ...

Удаление дубликатов с массива
Добрый день! подскажите плиз как с массива типа List<string> удалить повторяющие строки. public List<string> lst = new...

Удаление дубликатов из массива
Короче, задача у меня такая. Имеются два массива. Каждый массив имеет вот такие строки: ...

5
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
08.08.2021, 23:50
Цитата Сообщение от moDorks Посмотреть сообщение
Но мне говорит что выход за пределы
Как ты думаешь - что станет с длиной, если удалить элемент?
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,736
Записей в блоге: 14
09.08.2021, 08:28
moDorks, удалять данные из середины итерируемого объекта - тревожно... Лучше перенести удаляемое в хвост, а потом удалить:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
l=[{'name': '2001', 'category': 5, 'gender': 'Ч', 'weights': '50;51;65'}, {'name': '1994-2020', 'category': 7, 'gender': 'Ч', 'weights': '50;51;65+'}, {'name': '1994-2020', 'category': 8, 'gender': 'Ч', 'weights': '50;51;65+'}, {'name': '1994-2020', 'category': 16, 'gender': 'Ч', 'weights': '50;51;65+'}, {'name': '1994-2020', 'category': 17, 'gender': 'Ч', 'weights': '50;51;65+'}]
 
# "уничтожаем" совпадения
 
for i in range(len(l)-1):
    if l[i]['name']==l[i+1]['name'] and l[i]['gender']==l[i+1]['gender']:
        l[i]={}
 
# сносим уникальные в начало
 
i_f=0
i_t=0
while (i_f<len(l)):
    if l[i_f]=={}:
        i_f+=1
    else:
        l[i_t]=l[i_f]
        i_t+=1
        i_f+=1
 
# удаляем ненужный хвост
 
for _ in range(len(l)-i_t):
    l.pop()
    
print(l)
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
09.08.2021, 08:36
... а еще лучше - отфильтровать и собрать нужное...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,736
Записей в блоге: 14
09.08.2021, 12:23
Цитата Сообщение от iSmokeJC Посмотреть сообщение
а еще лучше
- точнее "проще написать". Оба алгоритма (мой и filter) имеют по n сложность O(n). Но мой - не требует доп. памяти.
1
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
09.08.2021, 14:07
moDorks, так пойдет?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from dataclasses import dataclass, field
 
 
@dataclass(frozen=True)
class Class:
    name: str
    category: int = field(compare=False)
    gender: str
    weights: str = field(compare=False)
    
list_ = [{'name': '2001', 'category': 5, 'gender': 'Ч', 'weights': '50;51;65'}, {'name': '1994-2020', 'category': 7, 'gender': 'Ч', 'weights': '50;51;65+'}, {'name': '1994-2020', 'category': 8, 'gender': 'Ч', 'weights': '50;51;65+'}, {'name': '1994-2020', 'category': 16, 'gender': 'Ч', 'weights': '50;51;65+'}, {'name': '1994-2020', 'category': 17, 'gender': 'Ч', 'weights': '50;51;65+'}]
classes = {Class(**kwargs) for kwargs in list_}
print(*classes)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.08.2021, 14:07
Помогаю со студенческими работами здесь

Удаление дубликатов из массива
Разработать программу, считывающую от пользователя произвольное количество чисел в массив и удаляющую дубликаты из массива. Программа...

Удаление дубликатов элементов массива
Написать функцию которая будет удалять дубликаты элементов из массива. Входные параметры: массив, длинна массива, выходные данные - новый...

Работа с массивом, удаление пустых ячеек со сдвигом влево, удаление дубликатов в массиве
Имеется рабочая область (E10:T40), весь процесс форматирования таблицы выполняется в этой границе. Если имеется 4 пустых ячейки в строке...

Удаление дубликатов + ассинхронное удаление из другой таблицы
Есть две таблицы tbl_content : id, title tbl_pics : id, picname 1. Нужно удалить дубликаты &quot;title&quot; из таблицы...

Удаление пустых словарей и список из структуры
Напишите программу, которая из JSON-структуры удаляет значения, являющиеся пустыми словарями ({}) или пустыми списками (), до тех пор, пока...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru