当前位置:首页 > Python > 正文

Python字典遍历键值对的完整指南 - 方法与示例 | Python教程

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中的键值对数据!

发表评论