字典(dict)作为 Python 中最常用的数据结构之一,合并两个字典是日常开发高频操作。
我整理了8种最实用的合并方法,从简单到进阶,附带清晰示例、优缺点和适用场景,直接复制就能用,非常适合公众号分享!
一、先明确2个核心规则
- 键重复时:后合并的字典会覆盖先合并的字典(这是 Python 默认规则)
dict1 = {"name": "Python", "version": 3.10, "author": "Guido"}
dict2 = {"name": "Python3", "version": 3.12, "year": 1991}
二、8种合并字典方法(详细+可直接复制)
方法1:update() 方法(最基础、原地合并)
直接把第二个字典合并到第一个,会修改原字典,不生成新字典。
# 原始字典
dict1 = {"name": "Python", "version": 3.10, "author": "Guido"}
dict2 = {"name": "Python3", "version": 3.12, "year": 1991}
# 合并:dict2 合并到 dict1
dict1.update(dict2)
print(dict1)
✅ 输出:
{'name': 'Python3', 'version': 3.12, 'author': 'Guido', 'year': 1991}
📌 特点:
方法2:{**dict1, **dict2} 解包(Python3.5+,推荐)
最优雅的非原地合并,生成全新字典,不修改原字典,代码极简。
dict1 = {"name": "Python", "version": 3.10}
dict2 = {"name": "Python3", "year": 1991}
# 解包合并
new_dict = {**dict1, **dict2}
print(new_dict)
✅ 输出:
{'name': 'Python3', 'version': 3.10, 'year': 1991}
📌 特点:
方法3:| 运算符(Python3.9+,最简洁)
Python 3.9 新增字典专用合并运算符,语义最清晰,可读性拉满。
dict1 = {"name": "Python", "version": 3.10}
dict2 = {"name": "Python3", "year": 1991}
# 管道符直接合并
new_dict = dict1 | dict2
print(new_dict)
✅ 输出和上面完全一致。
📌 进阶:|= 原地合并(直接修改原字典)
dict1 |= dict2 # 等价于 dict1.update(dict2)
📌 特点:
方法4:dict() 构造函数(兼容所有版本)
用 dict() 把合并结果转为新字典,全版本兼容,新手友好。
dict1 = {"name": "Python", "version": 3.10}
dict2 = {"name": "Python3", "year": 1991}
# 先复制 dict1,再更新 dict2
new_dict = dict(dict1)
new_dict.update(dict2)
print(new_dict)
📌 特点:
方法5:collections.ChainMap(不合并内存,只读高效)
不会真正合并字典,只是逻辑上串联,内存占用极小,适合大量数据。
from collections import ChainMap
dict1 = {"name": "Python", "version": 3.10}
dict2 = {"name": "Python3", "year": 1991}
# 链式映射
combined = ChainMap(dict1, dict2)
# 转普通字典(需要真正合并时)
new_dict = dict(combined)
print(new_dict)
⚠️ 注意:键重复时,先出现的字典覆盖后出现(和其他方法相反)。 📌 特点:
方法6:字典推导式(灵活自定义,高级用法)
用推导式遍历键值对,可自定义过滤、修改数据,灵活性最强。
dict1 = {"name": "Python", "version": 3.10}
dict2 = {"name": "Python3", "year": 1991}
# 推导式合并
new_dict = {k: v for d in [dict1, dict2] for k, v in d.items()}
print(new_dict)
📌 特点:
方法7:merge() 函数(手写通用工具)
封装成工具函数,项目中直接复用,适合团队开发。
defmerge_dict(d1, d2):
"""合并两个字典,返回新字典"""
result = d1.copy()
result.update(d2)
return result
# 使用
dict1 = {"name": "Python"}
dict2 = {"version": 3.12}
new_dict = merge_dict(dict1, dict2)
print(new_dict)
方法8:合并多个字典(不限数量)
不止两个,任意数量字典都能一键合并:
# 方法1:解包(推荐)
dict1 = {"a":1}
dict2 = {"b":2}
dict3 = {"c":3}
new_dict = {**dict1, **dict2, **dict3}
# 方法2:| 运算符
new_dict = dict1 | dict2 | dict3
三、一张表总结:怎么选最合适?
| | | |
|---|
update() | | | |
{**d1,**d2} | | | |
| | | |
dict() | | | |
ChainMap | | | |
| | | |
四、高频避坑提醒
- 键重复一定是「后合并覆盖先合并」(除 ChainMap 外)
- 不想修改原字典:一定不要用
update() / |= - 企业开发优先用:
{**d1, **d2} 或 | 运算符
总结
- 日常开发**首选
{**dict1, **dict2}**,安全简洁、兼容性好; - Python3.9+ 用
dict1 | dict2,代码最优雅; - 大数据只读场景用
ChainMap,内存效率拉满; 8种方法覆盖所有场景,新手直接复制示例就能用!