当前位置:首页>python>Python字典的增删改查——键值对操作大全

Python字典的增删改查——键值对操作大全

  • 2026-09-29 21:48:50
Python字典的增删改查——键值对操作大全

一、回顾:什么是字典?

字典(dict)是 Python 中存储键值对的容器,键唯一且不可变,值可以是任意类型。字典是可变的,因此我们可以动态地添加、修改、删除其中的键值对,也可以方便地查找和访问。

student = {"name": "小明", "age": 18}

本文将系统介绍字典的增、删、改、查操作,并涵盖相关方法和注意事项。


二、增加和修改字典元素(增 / 改)

2.1 直接赋值 dict[键] = 值

如果键不存在,则为添加新键值对;如果键已存在,则为修改对应值。

student = {"name": "小明", "age": 18}# 修改已有键的值student["age"] = 19print(student)  # {'name': '小明', 'age': 19}# 添加新的键值对student["city"] = "北京"print(student)  # {'name': '小明', 'age': 19, 'city': '北京'}

2.2 使用 update() 方法合并字典

update([other]) 方法可以将另一个字典或可迭代的键值对添加到当前字典中,如果键重复,则覆盖原值。

student = {"name": "小明", "age": 18}# 用另一个字典更新new_info = {"age": 20, "score": 95}student.update(new_info)print(student)  # {'name': '小明', 'age': 20, 'score': 95}# 直接传入键值对元组列表student.update([("gender", "男"), ("city", "上海")])print(student)  # {'name': '小明', 'age': 20, 'score': 95, 'gender': '男', 'city': '上海'}# 使用关键字参数(键名必须是合法标识符)student.update(hobby="篮球", height=175)print(student)  # ... 'hobby': '篮球', 'height': 175

注意:update() 没有返回值,直接修改原字典。


三、删除字典元素(删)

3.1 del 语句——按键删除

student = {"name": "小明", "age": 18, "city": "北京"}del student["age"]print(student)  # {'name': '小明', 'city': '北京'}# 删除不存在的键会引发 KeyError# del student["gender"]  # KeyError

del 还可以删除整个字典变量:

del student# print(student)  # NameError: name 'student' is not defined

3.2 pop() 方法——删除并返回指定键的值

pop(key[, default]) 删除指定键,并返回其对应的值。如果键不存在,返回 default(若未提供 default 则引发 KeyError)。

student = {"name": "小明", "age": 18, "city": "北京"}age = student.pop("age")print(age)       # 18print(student)   # {'name': '小明', 'city': '北京'}# 安全删除,提供默认值gender = student.pop("gender", "未知")print(gender)    # 未知

3.3 popitem() 方法——删除并返回最后一个键值对

popitem() 在 Python 3.7+ 中删除并返回字典中最后插入的一个键值对(LIFO),以元组形式返回。在旧版本中随机删除。

student = {"name": "小明", "age": 18, "city": "北京"}item = student.popitem()print(item)      # ('city', '北京')print(student)   # {'name': '小明', 'age': 18}

如果字典为空,调用 popitem() 会引发 KeyError。

3.4 clear() 方法——清空所有键值对

student = {"name": "小明", "age": 18}student.clear()print(student)   # {}

四、查找与访问字典元素(查)

4.1 通过键直接访问 dict[键]

student = {"name": "小明", "age": 18}print(student["name"])   # 小明# print(student["gender"])  # KeyError

如果键不存在,会抛出 KeyError,因此通常配合 in 检查或使用 get()。

4.2 get() 方法——安全获取值

get(key[, default]) 返回键对应的值,如果键不存在则返回 default(默认 None)。

student = {"name": "小明", "age": 18}print(student.get("name"))          # 小明print(student.get("gender"))        # Noneprint(student.get("gender", "未知")) # 未知

4.3 setdefault() 方法——获取或设置默认值

setdefault(key[, default]) 如果键存在,返回其值;如果键不存在,插入该键并设置为 default(默认为 None),然后返回该值。

student = {"name": "小明", "age": 18}age = student.setdefault("age", 20)print(age)          # 18(原值)print(student)      # {'name': '小明', 'age': 18}gender = student.setdefault("gender", "男")print(gender)       # 男(新插入的值)print(student)      # {'name': '小明', 'age': 18, 'gender': '男'}

4.4 使用 in 检查键是否存在

student = {"name": "小明", "age": 18}if"age"in student:print("年龄存在")if"score"notin student:print("分数不存在")

4.5 获取所有键、值、键值对

  • • keys():返回所有键的视图(可迭代、类似集合)。
  • • values():返回所有值的视图。
  • • items():返回所有键值对的视图,每个元素是 (键, 值) 元组。
student = {"name": "小明", "age": 18, "city": "北京"}print(student.keys())    # dict_keys(['name', 'age', 'city'])print(student.values())  # dict_values(['小明', 18, '北京'])print(student.items())   # dict_items([('name', '小明'), ('age', 18), ('city', '北京')])# 可以转换为列表keys_list = list(student.keys())print(keys_list)         # ['name', 'age', 'city']# 遍历for key, value in student.items():print(f"{key}: {value}")

注意: 这些视图是动态的,字典变化时视图也会实时更新。

4.6 获取字典长度 len()

student = {"name": "小明", "age": 18}print(len(student))   # 2

五、复制字典

字典是可变对象,直接赋值 dict2 = dict1 只是引用同一个对象,修改一个会影响另一个。因此需要复制。

5.1 浅拷贝 copy()

original = {"name": "小明", "scores": [85, 92]}copy_dict = original.copy()copy_dict["name"] = "小红"# 修改不可变值,不影响原字典copy_dict["scores"].append(95)      # 修改列表(可变对象),会影响原字典print(original)   # {'name': '小明', 'scores': [85, 92, 95]}print(copy_dict)  # {'name': '小红', 'scores': [85, 92, 95]}

5.2 深拷贝 deepcopy

如果希望完全独立,包括内部可变对象,需用 copy.deepcopy。

import copyoriginal = {"name": "小明", "scores": [85, 92]}deep_copy = copy.deepcopy(original)deep_copy["scores"].append(95)print(original)   # {'name': '小明', 'scores': [85, 92]}print(deep_copy)  # {'name': '小明', 'scores': [85, 92, 95]}

六、实战案例

案例1:学生成绩管理系统

defstudent_scores():    scores = {}whileTrue:print("\n1. 添加/修改成绩")print("2. 删除学生")print("3. 查询成绩")print("4. 显示所有学生")print("0. 退出")        choice = input("请选择:")if choice == '1':            name = input("学生姓名:")            score = int(input("成绩:"))            scores[name] = scoreprint("已保存")elif choice == '2':            name = input("要删除的学生:")if name in scores:                scores.pop(name)print("已删除")else:print("学生不存在")elif choice == '3':            name = input("要查询的学生:")            score = scores.get(name)if score isnotNone:print(f"{name} 的成绩是 {score}")else:print("学生不存在")elif choice == '4':if scores:for name, score in scores.items():print(f"{name}: {score}")else:print("暂无数据")elif choice == '0':break

案例2:统计单词出现次数

text = "apple banana apple orange banana apple"words = text.split()word_count = {}for word in words:    word_count[word] = word_count.get(word, 0) + 1print(word_count)  # {'apple': 3, 'banana': 2, 'orange': 1}

案例3:字典嵌套操作

# 存储多个学生信息students = {}students["001"] = {"name": "张三", "age": 20}students["002"] = {"name": "李四", "age": 21}# 修改嵌套值students["001"]["age"] = 22print(students["001"])  # {'name': '张三', 'age': 22}# 添加嵌套键值对students["002"]["score"] = 95print(students["002"])  # {'name': '李四', 'age': 21, 'score': 95}

案例4:使用 setdefault 简化计数

# 用 setdefault 实现计数word_count = {}for word in words:    word_count.setdefault(word, 0)    word_count[word] += 1# 不过通常用 get 更简洁

七、注意事项总结

  1. 1. 键必须可哈希:字典的键必须是不可变类型(整数、浮点数、字符串、元组等)。列表、字典等可变类型不能作为键。
  2. 2. 键唯一性:如果添加的键已存在,则更新其值,不会创建新项。
  3. 3. 直接访问(d[key]) 键不存在会引发 KeyError,建议用 get() 安全访问。
  4. 4. pop() 与 del:pop() 返回被删除的值,而 del 不返回。
  5. 5. 视图动态性:keys()、values()、items() 返回的视图会随原字典变化,且支持集合运算(keys() 和 items())。
  6. 6. Python 3.7+ 字典有序:字典会保持插入顺序,因此 popitem() 删除的是最后插入的项。
  7. 7. 浅拷贝 vs 深拷贝:当字典值包含可变对象时,浅拷贝可能导致意外共享,必要时使用 copy.deepcopy。
  8. 8. 性能:字典的查找、插入、删除操作平均时间复杂度为 O(1),非常高效。

八、总结

  • • 增加/修改:d[key] = value、d.update(other)
  • • 删除:del d[key]、d.pop(key)、d.popitem()、d.clear()
  • • 查找:d[key]、d.get(key)、d.setdefault(key)、key in d、d.keys()、d.values()、d.items()
  • • 其他:len(d)、d.copy()、copy.deepcopy(d)

掌握字典的增删改查是 Python 数据处理的基础,通过大量练习,你会越来越熟练。

最新文章

随机文章