python - 如何在字典列表中查找常见的字典
问题描述
我有一个字典列表,我想找到两个列表之间的常用字典。
例如:
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 中是不可散列的。
如何解决这个问题?
解决方案
列表理解可以在这里工作:
>>> [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在评论中发布的方法非常相似。
推荐阅读
- html - 如何使用嵌入
- javascript - 如何从父母更新孩子的(从创建的列表中)道具
- c++ - 使用 Media Foundation 对通过桌面复制获得的 D3D 表面进行编码
- angular - 找不到模块“@angular/core/src/metadata/lifecycle_hooks”-primeng/table/table.d.ts
- wordpress - Wordpress - Elementor 自定义小部件 - 条件控件
- c# - 如何在页面中查看此特定数据?
- javascript - NodeJs 在使用异步瀑布时面临问题
- php - 按键计算数组值
- c - 虽然返回 si_addr 与 sigwaitinfo 函数的偏移量导致分段错误
- docker - 访问在端口 8080 上运行 REST API 的 docker 容器的 Travis CI 连接错误