Как найти распространенные вхождения словаря в списке из списка словарей - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть список списка словарей, и я хочу найти общие словари между двумя списками.

Например:

dict_list = [[{'1' : 1,'2' : 2, '3' :3}, {'6' : 6,'5' : 5, '4' : 4}],  
             [{'1' : 1,'2' : 2, '3' :3}, {'7' : 7,'8' : 8, '9' : 9}]]

Результат должен быть [{'1' : 1,'2' : 2, '3' :3}]

Я пытался использовать множество пересечений, но словари в python невидимы.

Как это решить?

1 Ответ

0 голосов
/ 14 ноября 2018

A понимание списка может работать здесь:

>>> [x for x in dict_list[0] if x in dict_list[1]]
[{'1': 1, '2': 2, '3': 3}]

Но это не очень общее решение, поскольку предполагается, что существуют только два вложенных списка.

Более общим решением будет подсчет вхождений с collections.Counter() и сохранение словаря items() с типами хэшируемых / неизменяемых, таких как frozenset()или tuple().Тогда все, что вам нужно сделать, это отфильтровать события, которые на больше , чем 1.

Пример:

>>> from itertools import chain
>>> from collections import Counter
>>> [dict(k) for k, v in Counter(frozenset(x.items()) for x in chain.from_iterable(dict_list)).items() if v > 1]
[{'1': 1, '2': 2, '3': 3}]

Что очень похоже наПодход @ Chris_Rands размещен в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...