“告别 dict.update!Python 3.9+ 字典合并的逆天操作符来了”

一、为什么你需要抛弃 dict.update

在 Python 3.9 之前,合并字典的“标准操作”通常是这样的:

config = {"host": "localhost", "port": 8080}
defaults = {"port": 80, "debug": False}
# 传统合并方式
merged = defaults.copy()  # 防止污染原字典
merged.update(config)
print(merged)  # {'port': 8080, 'debug': False, 'host': 'localhost'}

标准操作其实还是有很多痛点:
(1)需要 2 行代码,且必须复制原字典避免污染数据。
(2)update() 方法返回 None,无法链式调用。
(3)合并多个字典时需要嵌套多个 update() 调用。

二、逆天操作符 | 横空出世

Python 3.9 新增的字典合并运算符 |就地合并运算符 |=,让代码瞬间优雅!

config = {"host": "localhost", "port": 8080}
defaults = {"port": 80, "debug": False}
# (1)合并两个字典,生成新字典
merged = defaults | config
print(merged)  # {'port': 8080, 'debug': False, 'host': 'localhost'}
# (2)就地合并(类似 update(),但直接返回结果)
defaults |= config
print(defaults)  # {'port': 8080, 'debug': False, 'host': 'localhost'}

三、新操作符的 4 大核心优势

(1)不修改原字典,杜绝副作用

d1 = {"a": 1}
d2 = {"b": 2}
result = d1 | d2
print(d1)  # {'a': 1}(原字典未改变)
print(result)  # {'a': 1, 'b': 2}

(2)支持链式操作,一行合并 N 个字典

d1 = {"a": 1}
d2 = {"b": 2}
d3 = {"c": 3}
merged = d1 | d2 | d3 | {"d": 4}
print(merged)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

四、注意事项(避坑指南)

(1)Python 版本强制要求

# 必须 >= Python 3.9
import sys
assert sys.version_info >= (3, 9), "请升级你的Python版本!"

(2)键冲突优先级

# 右侧字典的键覆盖左侧
print({"a": 1} | {"a": 2})  # {'a': 2}

你可能感兴趣的:(你不知道的,Python,那些事儿,python,开发语言,学习)