У меня есть список словарей в Python 3.5.2, которые я пытаюсь «дедуплицировать».Все словари уникальны, но есть определенный ключ, на который я хотел бы дедуплицировать, сохраняя словарь с большинством ненулевых значений.
Например, у меня есть следующий список словарей:
d1 = {"id":"a", "foo":"bar", "baz":"bat"}
d2 = {"id":"b", "foo":"bar", "baz":None}
d3 = {"id":"a", "foo":"bar", "baz":None}
d4 = {"id":"b", "foo":"bar", "baz":"bat"}
l = [d1, d2, d3, d4]
Я бы хотел отфильтровать l
только по словарям с уникальными ключами id
, сохранив в словаре наименьшее количество нулей.В этом случае функция должна сохранять значения d1
и d4
.
. Я попытался создать новый ключ, пару val для «счетчика значений», например:
for d in l:
d['val_count'] = len(set([v for v in d.values() if v]))
Теперь я застрял в том, как отфильтровать мой список диктов для уникального ids
, где ключ val_count
- это большее значение.
Я открыт для других подходов, но не могуиспользуйте pandas
для этого проекта из-за нехватки ресурсов.
Ожидаемый результат:
l = [{"id":"a", "foo":"bar", "baz":"bat"},
{"id":"b", "foo":"bar", "baz":"bat"}]