杰瑞科技汇

Python字典遍历有哪些高效方法?

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

Python字典遍历有哪些高效方法?-图1
(图片来源网络,侵删)

我们将从最常用的方法开始,然后介绍更现代、更推荐的 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 会自动迭代字典的键,这种方式简洁高效。

Python字典遍历有哪些高效方法?-图2
(图片来源网络,侵删)

使用 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 视图,其中包含了字典中所有的值,这在当你需要处理所有数据,但不需要知道其来源键时非常有用。

Python字典遍历有哪些高效方法?-图3
(图片来源网络,侵删)

遍历字典的键值对

这是最常用、最推荐的方法,因为它允许你在一次循环中同时访问键和值,非常方便,使用 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}")

为什么不推荐?

  1. 效率低list(my_dict) 会创建一个全新的列表,占用额外的内存。
  2. 代码冗长:写法比 for key, value in my_dict.items() 复杂得多。
  3. 可读性差:不如直接使用 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)习惯的转换或特定算法需求。

最佳实践建议

  1. 默认选择 items():只要你需要在循环中同时访问键和值,就毫不犹豫地使用 for key, value in my_dict.items(),这是最清晰、最符合 Python 风格的写法。
  2. 明确需求:如果你只需要键,就用 for key in my_dict,如果你只需要值,就用 for value in my_dict.values(),让代码清晰地表达你的意图。
  3. 避免使用索引:除非有非常特殊的原因(你需要知道当前是第几个元素),否则不要将字典转换为列表再用索引遍历,这不仅效率低,而且代码不易读。

希望这个详细的解释能帮助你完全掌握 Python 字典的遍历!

分享:
扫描分享到社交APP
上一篇
下一篇