Python 如何在字典列表中查找字典的常见项
我有一个字典列表,我想在这两个列表之间找到常用的字典 例如: 结果应该是Python 如何在字典列表中查找字典的常见项,python,dictionary,Python,Dictionary,我有一个字典列表,我想在这两个列表之间找到常用的字典 例如: 结果应该是[{'1':1,'2':2,'3':3}] 我尝试使用集合交叉点,但在python中字典是不易损坏的 如何解决这个问题?列表理解可以在这里工作: >>> [x for x in dict_list[0] if x in dict_list[1]] [{'1': 1, '2': 2, '3': 3}] 但这不是一个非常通用的解决方案,因为它假设只有两个嵌套列表存在 一个更通用的解决方案是使用或等可散列/不可
[{'1':1,'2':2,'3':3}]
我尝试使用集合交叉点,但在python中字典是不易损坏的
如何解决这个问题?列表理解可以在这里工作:
>>> [x for x in dict_list[0] if x in dict_list[1]]
[{'1': 1, '2': 2, '3': 3}]
但这不是一个非常通用的解决方案,因为它假设只有两个嵌套列表存在
一个更通用的解决方案是使用或等可散列/不可变类型统计发生次数,并存储字典items()
。然后,您需要做的就是筛选计数超过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}]
这与评论中发布的方法非常相似
[dict(k)表示计数器中的k,v(tuple(x.items())表示链中的x。from_iterable(dict_list)).items()如果v>1]
@Chris_Rands我在发布我的解决方案时,根本没有看到你的解决方案。你想让我删除它吗?@RoadRunner不,不要删除它,人们有时也有同样的想法,谢谢你的提问:)在将dict列表转换为tuple列表后,他也可以使用set.intersection,我猜这里的要点是,即使字典不可散列,但它们是可比较的。
>>> 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}]