Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在字典列表中查找字典的常见项_Python_Dictionary - Fatal编程技术网

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}]