Python字典遍历案例:如何高效循环读取数据
目录导读
- Python字典基础回顾 – 什么是字典与常用结构
- 四种核心遍历方法 – keys()、values()、items() 与直接遍历
- 实战案例1:学生成绩管理系统 – 遍历字典进行统计
- 实战案例2:嵌套字典的深层遍历 – 多层级数据处理
- 常见错误与性能优化 – 避免误用与提升效率
- 问答环节 – 解决开发者最常遇到的3个问题
- 总结与推荐 – 根据场景选择合适的遍历方式
Python字典基础回顾
在Python中,字典(dict)是一种可变容器模型,存储键值对(key-value pairs),与列表不同,字典通过键而非索引来访问数据,典型结构如下:

student = {"name": "Alice", "age": 20, "grade": "A"}
遍历字典的核心需求有两个:读取键、读取值、或同时读取键值对,下面为你系统拆解所有主流遍历方法。
四种核心遍历方法
1 直接遍历字典(默认遍历键)
for key in student:
print(key) # 输出:name, age, grade
这是最简洁的方式,但如果你需要同时获取值,需结合 student[key] 使用。
2 使用 keys() 方法遍历所有键
for key in student.keys():
print(key, student[key])
显式调用 keys() 可提高代码可读性,标明你只关心键。
3 使用 values() 方法遍历所有值
for value in student.values():
print(value) # 输出:Alice, 20, A
此法更适用于只需数据不需要键名的场景,例如统计总分或筛选结果。
4 使用 items() 方法同时获取键和值(最推荐)
for key, value in student.items():
print(f"{key}: {value}")
这是Pythonic的标准写法,尤其适合修改或打印一对数据。
SEO优化小贴士:使用
items()在复杂数据处理中能减少代码量,提高爬取效率,因此被多数Python高级教程推荐。
实战案例1:学生成绩管理系统
假设有一个字典存储班级学生的各科成绩,需要计算每个学生的总分和平均分。
scores = {
"Alice": {"math": 90, "english": 85, "science": 92},
"Bob": {"math": 78, "english": 82, "science": 80},
"Charlie": {"math": 95, "english": 88, "science": 91}
}
for name, subjects in scores.items():
total = sum(subjects.values())
avg = total / len(subjects)
print(f"{name} 总分: {total}, 平均分: {avg:.2f}")
输出结果:
Alice 总分: 267, 平均分: 89.00
Bob 总分: 240, 平均分: 80.00
Charlie 总分: 274, 平均分: 91.33
关键点:通过 items() 获取外层键(姓名)和内层字典(科目与分数),再用 values() 提取具体分数,这是遍历嵌套字典的标准模式。
实战案例2:嵌套字典的深层遍历
你是否需要遍历三层甚至更多层级的字典?例如从JSON接口返回的嵌套数据,以下处理一个员工信息结构:
company = {
"department1": {
"manager": "Tom",
"employees": {
"emp1": {"name": "Lucy", "age": 28},
"emp2": {"name": "John", "age": 32}
}
},
"department2": {
"manager": "Jerry",
"employees": {
"emp3": {"name": "Mary", "age": 25}
}
}
}
# 遍历所有员工的名字和年龄
for dept_name, dept_info in company.items():
for emp_id, emp_detail in dept_info["employees"].items():
print(f"{dept_name} - {emp_id}: {emp_detail['name']}, {emp_detail['age']}")
输出:
department1 - emp1: Lucy, 28
department1 - emp2: John, 32
department2 - emp3: Mary, 25
注意:当层级过深时,建议使用递归函数自动化遍历,防止代码重复。
常见错误与性能优化
1 错误1:修改字典大小导致崩溃
遍历时删除或添加键会引发 RuntimeError,正确做法是复制键列表后再操作:
for key in list(dict.keys()):
if condition:
del dict[key]
2 错误2:意图获取值却只遍历键
for key in dict:
print(key) # 你以为是值,其实是键
建议始终用 items() 明确意图。
3 性能优化点
- 小字典(少于1000项):所有方法差异甚微,选择可读性最高的
items()。 - 大字典(百万级):如需遍历键,用
for key in dict而非.keys();如需值,用for value in dict.values()可节省内存。 - 如果只需判断某键是否存在,不要遍历,用
if key in dict。
问答环节
Q1:为什么我遍历字典时,输出顺序每次不同?
A:在Python 3.7+中,字典保持插入顺序,如果你的Python版本是3.6或更早,则顺序不保证,升级版本或使用 OrderedDict 即可解决。
Q2:如何遍历字典并同时根据条件删除某些项? A:安全做法是创建一个新字典,或者使用字典推导式:
new_dict = {k: v for k, v in dict.items() if condition}
这样可以彻底避免运行时错误。
Q3:当需要遍历嵌套字典并获取所有键的路径时,怎么办? A:推荐使用递归函数,收集路径:
def get_all_keys(d, path=""):
for k, v in d.items():
yield f"{path}.{k}" if path else k
if isinstance(v, dict):
yield from get_all_keys(v, f"{path}.{k}" if path else k)
总结与推荐
| 场景 | 推荐方法 | 理由 |
|---|---|---|
| 仅需要字典的值 | dict.values() |
最直接,无键干扰 |
| 同时需要键和值 | dict.items() |
代码简洁,Pythonic |
| 修改字典内容(增删) | 先复制 list(dict.items()) |
防止运行时错误 |
| 处理嵌套多层级 | 递归 + items() |
通用性强 |
遍历不是目的,数据提取才是,根据业务选择最合适的方法,代码就能既高效又易维护。
掌握了这些实战技巧,你可以轻松应对99%的字典处理场景,现在就去你的代码中用 items() 试一试吧!