当前位置:首页>python>全网最全!Python 字典更新 8 种方法+案例演示

全网最全!Python 字典更新 8 种方法+案例演示

  • 2026-10-11 07:39:39
全网最全!Python 字典更新 8 种方法+案例演示

字典是 Python 中使用率最高的数据结构,而更新字典(添加/修改键值对、合并字典)是日常开发必用操作!

但很多新手只知道用 dict[key] = value,遇到复杂更新就手忙脚乱。今天整理8种实用字典更新方法,从基础到高阶,附完整可运行代码+场景说明,直接复制就能用,新手也能轻松吃透!


🔥 核心先懂:字典更新分2类

  1. 单键值更新:修改/添加一个键值对
  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(字典2)
  • 字典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种方法对比表(建议收藏)

方法
是否修改原字典
适用场景
推荐指数
直接赋值 dict[key]=val
是
单个键值更新
⭐⭐⭐⭐⭐
update()
是
批量更新/合并字典
⭐⭐⭐⭐⭐
解包 {**d1,**d2}
否
生成新字典,不改动原数据
⭐⭐⭐⭐⭐
`
=` 运算符
是
简洁批量更新(3.9+)
setdefault()
是
仅新增,不覆盖已有键
⭐⭐⭐⭐
dict()
 构造
否
拷贝+更新一步到位
⭐⭐⭐
`
` 运算符
否
合并生成新字典(3.9+)
字典推导式
否
条件筛选、逻辑化更新
⭐⭐⭐⭐

✅ 开发最佳实践(必看)

  1. 改单个键值:用 直接赋值,最简单
  2. 批量更新/合并:用 update() 或 **|=**,最高效
  3. 不改动原字典:用 **字典解包 {**d1,**d2}**,最安全
  4. 仅新增不覆盖:用 **setdefault()**,避免误改数据
  5. 带条件更新:用 字典推导式,灵活强大

📝 总结

Python 字典更新不用死记硬背:

  • 基础操作:直接赋值 + update() 搞定 80% 场景
  • 安全操作:字典解包 不修改原数据
  • 高级操作:推导式 + setdefault() 应对复杂逻辑

这篇全是干货,收藏起来,开发字典更新直接对照用!

最新文章

随机文章