字典是 Python 中使用率最高的数据结构,而更新字典(添加/修改键值对、合并字典)是日常开发必用操作!
但很多新手只知道用 dict[key] = value,遇到复杂更新就手忙脚乱。今天整理8种实用字典更新方法,从基础到高阶,附完整可运行代码+场景说明,直接复制就能用,新手也能轻松吃透!
🔥 核心先懂:字典更新分2类
所有方法都标注适用场景,开发直接对照选!
一、基础篇:最常用的 4 种字典更新方法
1. 直接赋值:最简单的单键更新(必学)
语法:字典名[键] = 值作用:键存在 → 修改值;键不存在 → 新增键值对适用场景:单个键值的修改/添加,日常开发最常用
代码示例
# 原字典
user = {"name": "张三", "age": 20}
# 1. 键存在:修改 age 的值
user["age"] = 25
# 2. 键不存在:新增 gender 键值对
user["gender"] = "男"
# 打印结果
print("更新后字典:", user)
输出结果
更新后字典: {'name': '张三', 'age': 25, 'gender': '男'}
2. update():批量更新神器(高频)
语法:
- 字典1.update(键1=值1, 键2=值2)作用:批量添加/修改键值对,直接修改原字典适用场景:合并两个字典、批量更新多个键值对
代码示例
# 原字典
student = {"name": "李四", "score": 90}
# 方式1:传入另一个字典批量更新
student.update({"score": 95, "class": "三年二班"})
# 方式2:直接传键值对参数更新
student.update(age=18, gender="女")
print("update批量更新后:", student)
输出结果
update批量更新后: {'name': '李四', 'score': 95, 'class': '三年二班', 'age': 18, 'gender': '女'}
✅ 优点:支持多种传参方式,批量操作高效 ❌ 缺点:会直接修改原字典,无返回值
3. 字典解包 {**dict1, **dict2}:不修改原字典(推荐)
语法:新字典 = {**原字典, **更新字典}作用:合并字典,生成全新字典,原字典完全不变适用场景:需要保留原字典,生成新的合并字典
代码示例
# 原字典(不动)
dict1 = {"a": 1, "b": 2}
# 更新字典
dict2 = {"b": 3, "c": 4}
# 解包合并:生成新字典,不修改原字典
new_dict = {**dict1, **dict2}
print("原字典 dict1:", dict1)
print("合并后新字典:", new_dict)
输出结果
原字典 dict1: {'a': 1, 'b': 2}
合并后新字典: {'a': 1, 'b': 3, 'c': 4}
4. |= 运算符:Python 3.9+ 专属批量更新
语法:字典1 |= 字典2作用:等价于 update(),批量更新键值对,直接修改原字典适用场景:代码简洁化,新版 Python 批量更新
代码示例
# 原字典
car = {"brand": "宝马", "price": 30}
# 更新数据
update_data = {"price": 35, "color": "黑色"}
# |= 批量更新
car |= update_data
print("|= 运算符更新后:", car)
输出结果
|= 运算符更新后: {'brand': '宝马', 'price': 35, 'color': '黑色'}
二、高阶篇:带逻辑的 4 种高级更新方法
5. setdefault():键不存在才更新
语法:字典.setdefault(键, 默认值)作用:键存在 → 不更新;键不存在 → 新增键值对适用场景:避免覆盖已有数据,安全新增
代码示例
# 原字典
goods = {"id": 1001, "name": "手机"}
# 键存在:不修改 name
goods.setdefault("name", "电脑")
# 键不存在:新增 price
goods.setdefault("price", 4999)
print("setdefault更新后:", goods)
输出结果
setdefault更新后: {'id': 1001, 'name': '手机', 'price': 4999}
6. dict() 构造函数:安全生成新字典
语法:新字典 = dict(原字典, **更新字典)作用:基于原字典创建新字典,不修改原数据适用场景:函数传参、数据拷贝+更新一步到位
代码示例
# 原字典
info = {"name": "小王", "job": "程序员"}
# 构造新字典,批量更新
new_info = dict(info, age=26, city="北京")
print("原字典:", info)
print("dict()构造更新后:", new_info)
输出结果
原字典: {'name': '小王', 'job': '程序员'}
dict()构造更新后: {'name': '小王', 'job': '程序员', 'age': 26, 'city': '北京'}
7. | 运算符:合并字典生成新字典(3.9+)
语法:新字典 = 字典1 | 字典2作用:合并两个字典,生成新字典,两个原字典都不变适用场景:纯合并,不修改任何源数据
代码示例
dict_a = {"x": 10, "y": 20}
dict_b = {"y": 25, "z": 30}
# | 合并,生成新字典
dict_c = dict_a | dict_b
print("原字典 dict_a:", dict_a)
print("| 合并新字典:", dict_c)
输出结果
原字典 dict_a: {'x': 10, 'y': 20}
| 合并新字典: {'x': 10, 'y': 25, 'z': 30}
8. 字典推导式:灵活条件更新(高阶)
语法:{键: 值 for 键,值 in 原字典.items() if 条件}作用:根据自定义逻辑筛选+修改键值对适用场景:带条件的批量更新、过滤字典
代码示例
# 原字典:成绩表
scores = {"语文": 85, "数学": 92, "英语": 78}
# 需求:所有成绩 +5 分(推导式更新)
new_scores = {key: value+5for key, value in scores.items()}
# 进阶:只更新低于80分的成绩
update_scores = {k: v+10if v<80else v for k,v in scores.items()}
print("全部加分后:", new_scores)
print("条件更新后:", update_scores)
输出结果
全部加分后: {'语文': 90, '数学': 97, '英语': 83}
条件更新后: {'语文': 85, '数学': 92, '英语': 88}
📊 8种方法对比表(建议收藏)
| | | |
|---|
| | | |
update() | | | |
| | | |
| | | |
setdefault() | | | |
dict() | | | |
| | | |
| | | |
✅ 开发最佳实践(必看)
- 批量更新/合并:用 update() 或 **|=**,最高效
- 不改动原字典:用 **字典解包
{**d1,**d2}**,最安全 - 仅新增不覆盖:用 **setdefault()**,避免误改数据
📝 总结
Python 字典更新不用死记硬背:
- 基础操作:直接赋值 + update() 搞定 80% 场景
- 高级操作:推导式 + setdefault() 应对复杂逻辑
这篇全是干货,收藏起来,开发字典更新直接对照用!