字典是 Python 中的核心数据结构之一,它存储的是键值对,遍历字典通常意味着访问它的键、值或键值对。

我们将从最常用的方法开始,然后介绍更现代、更推荐的 items() 方法,最后总结一下所有方法的优缺点和适用场景。
准备工作
我们创建一个示例字典,接下来的所有例子都将基于这个字典:
# 示例字典
student_info = {
"name": "Alice",
"age": 25,
"city": "New York",
"courses": ["Math", "Science", "History"]
}
遍历字典的键
这是最基本、最常见的方式,在 Python 3 中,for key in my_dict 会默认遍历字典的键。
代码示例
print("--- 遍历键 ---")
for key in student_info:
print(key)
输出
--- 遍历键 ---
name
age
city
courses
工作原理
当你直接将字典对象放在 for 循环中时,Python 会自动迭代字典的键,这种方式简洁高效。

使用 keys() 方法显式遍历键
keys() 方法会返回一个包含字典所有键的视图对象,你可以像遍历列表一样遍历这个视图对象。
代码示例
print("\n--- 使用 keys() 方法遍历键 ---")
for key in student_info.keys():
print(key)
输出
--- 使用 keys() 方法遍历键 ---
name
age
city
courses
工作原理
student_info.keys() 返回一个类似 dict_keys(['name', 'age', 'city', 'courses']) 的视图,在 for 循环中使用它和直接遍历字典的效果几乎完全相同,虽然它更明确地表达了“我要遍历键”的意图,但在日常编码中,直接遍历字典(方法一)是更 Pythonic(符合 Python 风格)的做法。
遍历字典的值
如果你只关心字典中的值,而不关心它们对应的键,可以使用 values() 方法,它会返回一个包含字典所有值的视图对象。
代码示例
print("\n--- 遍历值 ---")
for value in student_info.values():
print(value)
输出
--- 遍历值 ---
Alice
25
New York
['Math', 'Science', 'History']
工作原理
student_info.values() 返回一个 dict_values 视图,其中包含了字典中所有的值,这在当你需要处理所有数据,但不需要知道其来源键时非常有用。

遍历字典的键值对
这是最常用、最推荐的方法,因为它允许你在一次循环中同时访问键和值,非常方便,使用 items() 方法,它会返回一个包含字典所有键值对的视图对象,每个键值对是一个元组。
代码示例
print("\n--- 遍历键值对 (推荐方法) ---")
for key, value in student_info.items():
print(f"键: {key}, 值: {value}")
输出
--- 遍历键值对 (推荐方法) ---
键: name, 值: Alice
键: age, 值: 25
键: city, 值: New York
键: courses, 值: ['Math', 'Science', 'History']
工作原理
student_info.items() 返回一个 dict_items 视图,其中包含类似 [('name', 'Alice'), ('age', 25), ...] 的元组。for key, value in ... 这种写法是 Python 的元组解包功能,它会自动将每个元组的第一个元素赋给 key,第二个元素赋给 value。
使用 for 循环和索引
这种方法比较“笨重”,不推荐在日常使用,但为了知识的完整性,我们在这里提一下,你可以先将字典的键或键值对转换为列表,然后通过索引来访问。
代码示例
print("\n--- 使用索引遍历 (不推荐) ---")
# 获取所有键的列表
keys = list(student_info.keys())
for i in range(len(keys)):
key = keys[i]
value = student_info[key] # 需要通过键再次查找值
print(f"键: {key}, 值: {value}")
# 或者直接转换键值对对
items = list(student_info.items())
for i in range(len(items)):
key, value = items[i]
print(f"键: {key}, 值: {value}")
为什么不推荐?
- 效率低:
list(my_dict)会创建一个全新的列表,占用额外的内存。 - 代码冗长:写法比
for key, value in my_dict.items()复杂得多。 - 可读性差:不如直接使用
items()方法直观。
总结与最佳实践
| 方法 | 描述 | 示例 | 适用场景 |
|---|---|---|---|
for key in my_dict: |
遍历键 (Pythonic) | for k in student_info: |
当你只需要键时。 |
for key in my_dict.keys(): |
遍历键 (显式) | for k in student_info.keys(): |
当你想要明确表达意图时,但通常不如第一种简洁。 |
for value in my_dict.values(): |
遍历值 | for v in student_info.values(): |
当你只需要处理所有值,不关心键时。 |
for key, value in my_dict.items(): |
遍历键值对 (强烈推荐) | for k, v in student_info.items(): |
绝大多数情况下的首选,当你需要同时访问键和值时,这是最清晰、最高效的方式。 |
for i in range(len(my_dict)): |
通过索引遍历 (不推荐) | for i in range(len(student_info)): |
极少使用,通常用于与其他语言(如 C++/Java)习惯的转换或特定算法需求。 |
最佳实践建议
- 默认选择
items():只要你需要在循环中同时访问键和值,就毫不犹豫地使用for key, value in my_dict.items(),这是最清晰、最符合 Python 风格的写法。 - 明确需求:如果你只需要键,就用
for key in my_dict,如果你只需要值,就用for value in my_dict.values(),让代码清晰地表达你的意图。 - 避免使用索引:除非有非常特殊的原因(你需要知道当前是第几个元素),否则不要将字典转换为列表再用索引遍历,这不仅效率低,而且代码不易读。
希望这个详细的解释能帮助你完全掌握 Python 字典的遍历!
