当前位置:首页>python>Python 合并字典超全指南:8种方法+实例,新手也能秒懂

Python 合并字典超全指南:8种方法+实例,新手也能秒懂

  • 2026-10-11 05:46:37
Python 合并字典超全指南:8种方法+实例,新手也能秒懂

字典(dict)作为 Python 中最常用的数据结构之一,合并两个字典是日常开发高频操作。

我整理了8种最实用的合并方法,从简单到进阶,附带清晰示例、优缺点和适用场景,直接复制就能用,非常适合公众号分享!


一、先明确2个核心规则

  1. 键重复时:后合并的字典会覆盖先合并的字典(这是 Python 默认规则)
  2. 所有示例都用这两个基础字典:
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)

📌 特点:

  • 代码最简洁、专业
  • 仅支持 Python3.9+,低版本会报错

方法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)

📌 特点:

  • 兼容 Python2 / 所有低版本
  • 安全、不修改原字典

方法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}
简洁、不修改原数据
无
90%日常开发(首选)
`
` 运算符
最专业、极简
Python3.9+
dict()
全版本兼容
代码稍长
兼容低版本
ChainMap
超省内存
只读、键覆盖顺序相反
大数据只读
字典推导式
高度自定义
代码稍复杂
定制化合并

四、高频避坑提醒

  1. 键重复一定是「后合并覆盖先合并」(除 ChainMap 外)
  2. 不想修改原字典:一定不要用 update() / |=
  3. 企业开发优先用:{**d1, **d2} 或 | 运算符

总结

  1. 日常开发**首选 {**dict1, **dict2}**,安全简洁、兼容性好;
  2. Python3.9+ 用 dict1 | dict2,代码最优雅;
  3. 大数据只读场景用 ChainMap,内存效率拉满; 8种方法覆盖所有场景,新手直接复制示例就能用!

最新文章

随机文章