如何在Python中用单个表达式合并两个字典
如何在Python中用单个表达式合并两个字典
技术背景
在Python编程中,经常会遇到需要合并两个字典的场景。我们期望将两个字典合并成一个新的字典,且不改变原始字典,同时后一个字典的值能覆盖前一个字典中相同键的值。不同Python版本提供了不同的方法来实现这一需求。
实现步骤
Python 3.9.0 及更高版本
在Python 3.9.0及更高版本中,可以使用 |
操作符来合并两个字典。示例代码如下:
1 |
|
Python 3.5 及更高版本
在Python 3.5及更高版本中,可以使用字典解包语法 {**x, **y}
来合并两个字典。示例代码如下:
1 |
|
Python 2 或 3.4 及更低版本
在Python 2或3.4及更低版本中,需要编写一个函数来实现字典的合并。示例代码如下:
1 |
|
核心代码
合并任意数量的字典
1 |
|
递归合并字典
1 |
|
最佳实践
- 优先使用
|
操作符(Python 3.9+)或{**x, **y}
语法(Python 3.5+),因为它们简洁且性能较好。 - 如果需要兼容旧版本Python,可以编写函数使用
copy
和update
方法。 - 当需要合并多个字典时,使用
merge_dicts
函数。 - 当需要递归合并嵌套字典时,使用
dict_of_dicts_merge
函数。
常见问题
使用 dict(x.items() + y.items())
的问题
在Python 2中,会在内存中为每个字典创建两个列表,再创建一个长度等于前两个列表之和的新列表,最后丢弃这三个列表来创建字典,浪费资源和计算能力。在Python 3中,会因为 dict_items
对象不能相加而失败。示例代码如下:
1 |
|
使用 dict(x, **y)
的问题
这种方法要求 y
的键必须是字符串,否则在Python 3中会报错。示例代码如下:
1 |
|
合并嵌套字典的问题
{**x, **y}
和 x | y
只能进行浅合并,对于嵌套字典,内部嵌套的键值对会被直接覆盖,而不是递归合并。如果需要递归合并嵌套字典,可以使用 dict_of_dicts_merge
函数。
如何在Python中用单个表达式合并两个字典
https://119291.xyz/posts/2025-05-07.how-to-merge-two-dictionaries-in-python-with-a-single-expression/