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

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

08.08.2021, 23:42. Показов 4230. Ответов 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
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 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
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru