Python字典遍历键值对的完整指南 - 方法与示例 | Python教程
- Python
- 2025-07-21
- 43
Python字典遍历键值对的完整指南
为什么需要遍历字典?
在Python中,字典(dictionary)是一种非常高效的数据结构,用于存储键值对(key-value pairs)。实际编程中,我们经常需要遍历字典中的键值对来处理数据,例如:
- 数据提取与转换
- 数据过滤与筛选
- 数据聚合与统计
- 配置文件的处理
- API响应的解析
本教程将详细介绍Python中遍历字典键值对的各种方法及其适用场景。
基础遍历方法
1. 使用items()方法(推荐)
这是Python中最常用且最推荐的字典遍历方法,同时获取键和值。
# 示例字典
student_scores = {"Alice": 92, "Bob": 85, "Charlie": 78, "Diana": 95}
# 使用items()遍历
for name, score in student_scores.items():
print(f"{name}的成绩是:{score}分")
# 输出:
# Alice的成绩是:92分
# Bob的成绩是:85分
# Charlie的成绩是:78分
# Diana的成绩是:95分
优点:代码简洁、可读性高、同时访问键值
适用场景:大多数需要同时使用键和值的情况
2. 遍历键(keys)并访问值
先获取所有键,然后通过键访问对应的值。
# 同一个示例字典
student_scores = {"Alice": 92, "Bob": 85, "Charlie": 78, "Diana": 95}
# 遍历键并访问值
for name in student_scores:
print(f"{name}的成绩是:{student_scores[name]}分")
# 或者显式使用keys()
for name in student_scores.keys():
print(f"{name}的成绩是:{student_scores[name]}分")
优点:可以在循环中只使用键
缺点:需要额外的字典查找操作,性能略低于items()
适用场景:只需要键或需要修改字典结构时
3. 直接遍历值(values)
当只需要字典中的值而不关心键时,可以使用这种方法。
# 同一个示例字典
student_scores = {"Alice": 92, "Bob": 85, "Charlie": 78, "Diana": 95}
# 计算平均分
total = 0
for score in student_scores.values():
total += score
average = total / len(student_scores)
print(f"班级平均分:{average:.1f}分")
# 输出:班级平均分:87.5分
优点:代码简洁,当只需要值时效率高
缺点:无法访问对应的键
适用场景:统计、求和等只需要值的操作
高级遍历技巧
遍历时修改值
在遍历字典时直接修改值(Python 3.7+ 字典保持插入顺序)
# 商品价格字典
product_prices = {"苹果": 5.8, "香蕉": 3.5, "橙子": 4.2, "葡萄": 8.9}
# 所有商品涨价10%
for product, price in product_prices.items():
product_prices[product] = round(price * 1.1, 1)
print("涨价后的价格:", product_prices)
# 输出:{'苹果': 6.4, '香蕉': 3.9, '橙子': 4.6, '葡萄': 9.8}
条件过滤遍历
结合字典推导式进行条件过滤
# 学生成绩字典
student_grades = {"Alice": 92, "Bob": 85, "Charlie": 78, "Diana": 95, "Evan": 88}
# 找出成绩大于90分的学生
top_students = {name: grade for name, grade in student_grades.items() if grade > 90}
print("优秀学生:", top_students)
# 输出:优秀学生:{'Alice': 92, 'Diana': 95}
同时遍历多个字典
使用zip()函数同时遍历多个字典
# 两个相关字典
students = {101: "Alice", 102: "Bob", 103: "Charlie"}
scores = {101: 92, 102: 85, 103: 78}
# 同时遍历两个字典
for (id1, name), (id2, score) in zip(students.items(), scores.items()):
if id1 == id2:
print(f"学号:{id1},姓名:{name},分数:{score}")
# 输出:
# 学号:101,姓名:Alice,分数:92
# 学号:102,姓名:Bob,分数:85
# 学号:103,姓名:Charlie,分数:78
遍历方法性能比较
方法 | 时间复杂度 | 内存使用 | 适用场景 |
---|---|---|---|
items() |
O(n) | 最低 | 需要同时访问键和值 |
keys() + 值访问 |
O(n) | 低 | 需要修改字典结构 |
values() |
O(n) | 低 | 只需要值 |
字典推导式 | O(n) | 中 | 创建新字典 |
最佳实践总结
- 在大多数情况下,使用
items()
方法是最佳选择 - 当只需要键时,直接遍历字典或使用
keys()
- 当只需要值时,使用
values()
方法 - 避免在遍历过程中添加/删除字典项,除非使用keys()方法
- 对于大型字典,考虑使用生成器表达式减少内存消耗
- 使用字典推导式可以高效地创建新字典
常见问题解答
Q: 遍历字典时能否修改字典结构?
A: 使用items()或values()遍历时修改字典结构(添加/删除项)会导致RuntimeError。如果需要修改结构,应该:
- 遍历keys()的副本:
for key in list(my_dict.keys()):
- 或创建要删除项的列表,遍历结束后再删除
Q: Python 3.6之前版本遍历顺序是怎样的?
A: 在Python 3.6之前,字典遍历顺序是任意的,不保证插入顺序。从Python 3.7开始,字典保持元素插入顺序。
掌握这些字典遍历技巧,可以让你更高效地处理Python中的键值对数据!
本文由SituBinLei于2025-07-21发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20256115.html
发表评论