首页 > 解决方案 > 如何在字典列表中查找常见的字典

问题描述

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

例如:

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 中是不可散列的。

如何解决这个问题?

标签: pythondictionary

解决方案


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

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

但这不是一个非常通用的解决方案,因为它假设只有两个嵌套列表存在。

更通用的解决方案是使用 计算出现次数,并使用可散列/不可变类型(例如或collections.Counter())存储字典。然后,您需要做的就是过滤计数超过1 的出现。items()frozenset()tuple()

例子:

>>> 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在评论中发布的方法非常相似。


推荐阅读