Python字典元素的增、删、改操作

400 阅读4分钟

一、前言

在 Python 中,字典(dict) 是一种非常灵活且常用的数据结构,支持动态修改。我们可以在程序运行过程中对字典进行添加(增)、删除(删)、修改(改) 操作。

本文将系统性地介绍 Python 字典中常见的增删改操作方法,并结合大量代码示例和注意事项,帮助你掌握这些基础但至关重要的技能。

二、字典的基本特性回顾

  • ✅ 无序性:Python 3.7+ 开始默认保持插入顺序;
  • ✅ 可变性:可以随时添加、删除或修改其中的键值对;
  • ✅ 键唯一性:每个键必须唯一,重复键会被覆盖;
  • ✅ 值多样性:值可以是任意类型;
  • ✅ 键不可变性:键必须是不可变类型(如字符串、数字、元组);

例如:

my_dict = {'name': 'Alice', 'age': 25}

三、字典元素的“增”操作

1. 直接通过键赋值添加新元素

这是最简单也最常用的添加方式:

my_dict['gender'] = 'female'
print(my_dict)  # {'name': 'Alice', 'age': 25, 'gender': 'female'}

如果键不存在,则会新增一个键值对。

2. 使用 .update() 方法批量更新或添加

.update() 可以传入另一个字典或可迭代对象来更新当前字典:

my_dict.update({'city': 'Beijing', 'email': 'alice@example.com'})
print(my_dict)
# {'name': 'Alice', 'age': 25, 'gender': 'female', 'city': 'Beijing', 'email': 'alice@example.com'}

也可以传入列表形式的键值对:

my_dict.update([('phone', '123456'), ('hobby', 'reading')])

3. 使用 setdefault() 添加默认值(仅当键不存在时)

setdefault(key, default) 方法会在键不存在时设置默认值并返回该值:

value = my_dict.setdefault('score', 90)
print(value)      # 90
print(my_dict)    # {'name': 'Alice', 'age': 25, 'gender': 'female', 'score': 90}

✅ 特点:

  • 如果键存在,不会改变原有值;
  • 非常适合用于初始化计数器、缓存等场景。

四、字典元素的“删”操作

1. 删除指定键:del dict[key]

del my_dict['age']
print(my_dict)  # {'name': 'Alice', 'gender': 'female', 'score': 90}

⚠️ 如果键不存在,会抛出 KeyError 异常。

2. 删除并返回指定键的值:.pop(key[, default])

age = my_dict.pop('age', 0)  # 设置默认值避免异常
print(age)       # 0
print(my_dict)   # {'name': 'Alice', 'gender': 'female', 'score': 90}

如果不提供默认值且键不存在,会抛出 KeyError

3. 删除最后一个插入的键值对(Python 3.7+):.popitem()

key, value = my_dict.popitem()
print(f"被删除的项:{key} -> {value}")

⚠️ 在 Python 3.7+ 中,它会删除最后插入的键值对;否则行为不确定。

4. 清空整个字典:.clear()

my_dict.clear()
print(my_dict)  # {}

5. 删除整个字典变量:del dict_name

del my_dict
print(my_dict)  # 报错:NameError: name 'my_dict' is not defined

五、字典元素的“改”操作

1. 直接通过键修改值

可以直接通过已有的键名重新赋值:

my_dict['score'] = 85
print(my_dict)  # {'score': 85}

2. 使用 .update() 修改多个键值

可以传入包含已有键的新值来批量修改:

my_dict.update({'score': 92, 'name': 'Bob'})
print(my_dict)  # {'score': 92, 'name': 'Bob'}

3. 使用 .setdefault() 安全修改(只在键存在时)

虽然 .setdefault() 主要用于添加默认值,但它也能配合逻辑判断用于修改:

if 'score' in my_dict:
    my_dict['score'] += 5

或者更简洁写法:

my_dict['score'] = my_dict.get('score', 0) + 5

4. 使用字典推导式批量修改符合条件的值

scores = {'math': 75, 'english': 85, 'physics': 65}
updated_scores = {k: v + 5 if v < 80 else v for k, v in scores.items()}
print(updated_scores)  # {'math': 80, 'english': 85, 'physics': 70}

六、常见问题与注意事项

问题原因解决方法
KeyError访问了不存在的键使用 .get() 或 in 判断是否存在
删除不存在的键调用 .pop() 时未找到键提供默认值或先判断存在
修改原始字典时遍历遍历时修改可能导致索引混乱使用副本进行操作:for key in list(dict.keys())
大量数据频繁增删效率低字典本身不适合极端情况下的性能优化考虑使用 collections.defaultdict 或其他结构

七、总结对比表

操作方法是否安全是否返回值说明
添加元素d[key] = value最直接的方式
批量添加d.update(other)支持字典/列表等
安全添加d.setdefault(key, default)键不存在时添加
删除指定键del d[key]键必须存在
安全删除d.pop(key, default)推荐使用
删除最后一项d.popitem()✅(3.7+)返回 (key, value)
清空字典d.clear()对象仍存在
删除字典对象del d彻底删除变量
修改元素d[key] = new_value最直接的方法
批量修改d.update() / 推导式更高效的方式

八、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!