我有一个词典列表列表,我想找到两个列表之间的常用词典。
例如:
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中无法散列。
如何解决这个问题?
答案 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非常相似。