@vhsporno

Как удалить дубли словарей в списке с если один ключ отличается?

Есть список словарей вида:
[{'category': 'software', 'name': 'irssi', 'version': 5}, 
 {'category': 'software', 'name': 'irssi', 'version': 4},
 {'category': 'software', 'name': 'hexchat', 'version': 2},
 {'category': 'software', 'name': 'hexchat', 'version': 3},
 {'category': 'software', 'name': 'hexchat1', 'version': 1}]

Нужно удалить дубли, где с одинаковой категорией и именем, но оставить версию с минимальным числом среди этих дублей.
То есть ответ должен получится вида:
[ {'category': 'software', 'name': 'irssi', 'version': 4},
 {'category': 'software', 'name': 'hexchat', 'version': 2},
 {'category': 'software', 'name': 'hexchat1', 'version': 1}]

Вот так можно например удалить дубли, но не брать минимальную версию среди дублей
seen = set()
result = []

for dic in lst:
    key = (dic['category'], dic['name'])
    if key in seen:
        continue
    result.append(dic)
    seen.add(key)

print(result)
  • Вопрос задан
  • 890 просмотров
Решения вопроса 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Ну так пройдитесь по отсортированному массиву:
from operator import itemgetter

seen = set()
result = []
for dic in sorted(arr, key=itemgetter('version')):
    key = (dic['category'], dic['name'])
    if key in seen:
        continue
    result.append(dic)
    seen.add(key)

print(result)


[{'category': 'software', 'name': 'hexchat1', 'version': 1}, {'category': 'software', 'name': 'hexchat', 'version': 2}, {'category': 'software', 'name': 'irssi', 'version': 4}]
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
adugin
@adugin Куратор тега Python
import pandas as pd

src = [
    {'category': 'software', 'name': 'irssi', 'version': 5}, 
    {'category': 'software', 'name': 'irssi', 'version': 4},
    {'category': 'software', 'name': 'hexchat', 'version': 2},
    {'category': 'software', 'name': 'hexchat', 'version': 3},
    {'category': 'software', 'name': 'hexchat1', 'version': 1}
]

dst = (
    pd.DataFrame(src)
    .sort_values('version')
    .drop_duplicates(['category', 'name'])
    .to_dict('records')
)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект