python - 基于键匹配合并字典的最快方法
问题描述
我有两个字典:
dic_1={'1234567890': 1, '1234567891': 2, '1234567880': 3, '1234567881': 4}
dic_2={'1234567890': 5, '1234567891': 6}
现在我想根据键值合并它们,使合并的字典如下所示:
merged_dic=={'1234567890': 1, '1234567891': 2, '1234567880': 3, '1234567881': 4}
我们只想保留唯一的键和与它们相关联的唯一值。最好的方法是什么
解决方案
这应该是你需要的。只有当键不在合并字典中时,它才会遍历所有添加键/值的字典。
from itertools import chain
merged_dic = {}
for k, v in chain(dic_1.items(), dic_2.items()):
if k not in merged_dic:
merged_dic[k] = v
print(merged_dic)
# {'1234567890': 1, '1234567891': 2, '1234567880': 3, '1234567881': 4}
例如,如果您想保留可以使用的键的所有值:
from collections import defaultdict
from itertools import chain
merged_dic = defaultdict(list)
for k, v in chain(dic_1.items(), dic_2.items()):
merged_dic[k].append(v)
print(merged_dic)
# {'1234567890': [1, 5], '1234567891': [2, 6], '1234567880': [3], '1234567881': [4]}
使用chain()
可以让您遍历许多字典。在问题中,您展示了 2 个字典,但如果您有 4 个,您可以轻松地将它们全部合并。例如
for k, v in chain(dic_1.items(), dic_2.items(), dic_3.items(), dic_4.items()):
推荐阅读
- cassy - Cassy 的快照和一致性备份有什么区别?Cassy 是 Cassandra 的备份工具
- mysql - 什么是 org.h2.jdbc.JdbcSQLDataException:参数“columnIndex”[90008-200] 的值“3”无效?
- javascript - Jest 和 ESLint:Expect 必须有对应的 matcher 调用
- matlab - 如何使用 for 循环创建滑动窗口?
- javascript - 在本机反应中获取文本输入值的问题
- mysql - 是否可以使用查询行从 mysql INTERVAL 设置“expr”和“unit”?
- react-native - react-native-fs 无法访问存储
- c++ - 如何使用 CMake 构建库
- java - Apache Shiro 枚举仍在 Tomcat 的内存中取消部署
- r - 将列表从 lapply 导出到 R 中的 csv