如何在词典列表中查找常见的词典

时间:2018-11-14 10:54:56

标签: python dictionary

我有一个词典列表列表,我想找到两个列表之间的常用词典。

例如:

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 :(得分:3)

列表理解可以在这里工作:

>>> [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非常相似。