讲师中心 微信公众号
AI工具推荐 视频效率加速

Python字典合并方法有哪些_update与解包实战说明【指导】

冬宇大大_7243

冬宇大大_7243

发布时间:2025-12-27 15:08:55

|

1027人浏览过

|

来源于php中文网

原创

字典合并需注意覆盖逻辑与版本兼容性:update()原地修改且不递归;**解包仅Python3.5+支持且不处理None;|运算符(Python3.9+)最推荐,但嵌套合并仍需手动实现。

python字典合并方法有哪些_update与解包实战说明【指导】

用 update() 合并字典时要注意覆盖逻辑

update() 是原地修改方法,会直接修改调用它的字典,而不是返回新字典。它按键逐个覆盖:后合并的字典中同名键会覆盖前面的值。

  • 如果想保留原字典不变,得先 copy() 一份再调用 update()
  • 嵌套字典不会递归合并,比如 d1 = {'a': {'x': 1}}; d2 = {'a': {'y': 2}},d1.update(d2) 后 d1['a'] 变成 {'y': 2},不是 {'x': 1, 'y': 2}
  • 不支持传入非字典对象(如列表、字符串),否则抛出 TypeError: update() argument must be mapping or iterable
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}
d1.update(d2)
# d1 现在是 {'a': 1, 'b': 3, 'c': 4}

用解包(**)合并更安全但有 Python 版本限制

解包语法 {**d1, **d2} 创建全新字典,不修改原字典,且写法直观。但它要求所有被解包的对象都是字典(或实现了 keys() 和 __getitem__ 的映射类型),且只支持 Python 3.5+

  • 键冲突时,右边字典的值胜出,和 update() 一致
  • 不能直接解包 None 或空变量,会报 SyntaxError;需提前过滤掉非字典值
  • 多个字典解包顺序很重要:{**d1, **d2, **d3} 中 d3 的键会最终覆盖前两者
d1 = {'a': 1}
d2 = {'b': 2, 'c': 3}
merged = {**d1, **d2}  # {'a': 1, 'b': 2, 'c': 3}

处理嵌套字典合并得自己写逻辑,update() 和 ** 都不行

标准合并方式都只做浅层覆盖,对嵌套结构无能为力。比如两个字典都有 'config' 键且值都是字典,你希望它们内部也合并,就得手动递归或借助第三方工具。

Insurance Actuarial Python
Insurance Actuarial Python

使用奇异谱分析与平稳自助法分解利率时间序列,进行统计推断,构建NSS曲线模型并校准利率衍生品参数。

下载
  • 自己实现递归合并时,要判断值是否为 dict 类型,再决定是覆盖还是深入合并
  • 注意循环引用风险:如果嵌套结构里存在互相引用,递归函数可能无限深入
  • collections.ChainMap 能“逻辑上”合并多个字典(查找时按顺序搜索),但它不是真合并,也不支持写入嵌套键
def deep_update(target, source):
    for k, v in source.items():
        if k in target and isinstance(target[k], dict) and isinstance(v, dict):
            deep_update(target[k], v)
        else:
            target[k] = v
    return target

Python 3.9+ 推荐用 | 运算符,清晰又不可变

从 Python 3.9 开始,字典支持 |(合并)和 |=(就地更新)运算符,语义明确、不可变性好、可读性强,是目前最推荐的方式。

立即学习“Python免费学习笔记(深入)”;

  • d1 | d2 返回新字典,d1 |= d2 等价于 d1.update(d2)
  • 行为与 {**d1, **d2} 完全一致,包括覆盖规则和类型要求
  • 不支持 None 或非字典对象参与运算,错误信息更直接:TypeError: unsupported operand type(s) for |: 'dict' and 'NoneType'
d1 = {'x': 1}
d2 = {'y': 2}
result = d1 | d2  # {'x': 1, 'y': 2}

嵌套合并和版本兼容性是最容易被跳过的两处,尤其当项目要支持 3.8 及以下环境时,| 就不能用,而 ** 解包又没法处理 None 占位——这时候往往得加一层防御性判断。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5824

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2464

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1632

2025.10.17

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1578

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2324

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5824

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

4989

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

6694

2024.03.22

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

0

2026.09.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn