2022-01-27 04:00:51
Python字典遍历的核心方式包括遍历键、遍历值、同时遍历键值对,此外还有字典推导式、结合排序或使用ChainMap等高级技巧。以下是具体方法与实例:
一、核心遍历方式遍历键直接迭代字典对象或显式使用keys()方法,适用于仅需处理键的场景。
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}for key in my_dict: # 等价于 for key in my_dict.keys() print(f"键: {key}")遍历值使用values()方法直接获取所有值,适合统计或检查值是否存在。
for value in my_dict.values(): print(f"值: {value}")遍历键值对使用items()方法同时获取键和值,避免重复查找,效率最高。
for key, value in my_dict.items(): print(f"键: {key}, 值: {value}")直接修改字典会引发RuntimeError,需通过以下方法规避:
遍历副本修改创建键的副本(如list(my_dict.keys())),在副本上迭代并修改原字典。
my_dict = {'a': 1, 'b': 2, 'c': 3}keys_to_delete = [key for key, value in my_dict.items() if value % 2 == 0]for key in keys_to_delete: del my_dict[key] # 输出: {'a': 1, 'c': 3}构建新字典通过过滤或转换生成新字典,避免直接修改原字典。
original_dict = {'a': 1, 'b': 2, 'c': 3}filtered_dict = {k: v for k, v in original_dict.items() if v % 2 != 0} # 输出: {'a': 1, 'c': 3}字典推导式以紧凑方式创建新字典,支持过滤、转换或键值互换。
# 过滤值大于2的键值对filtered_dict = {k: v for k, v in my_dict.items() if v > 2} # 输出: {'name': 'Alice', 'age': 30}# 键值互换(需值唯一且可哈希)inverted_dict = {v: k for k, v in my_dict.items()} # 输出: {'Alice': 'name', 30: 'age', ...}结合sorted()排序遍历对键或值排序后遍历,适用于需要有序输出的场景。
my_dict = {'apple': 3, 'orange': 1, 'banana': 2}# 按键升序for key in sorted(my_dict.keys()): print(f"{key}: {my_dict[key]}")# 按值降序for key in sorted(my_dict, key=my_dict.get, reverse=True): print(f"{key}: {my_dict[key]}")使用ChainMap合并多个字典视图将多个字典视为单一逻辑字典遍历,避免物理合并的开销。
from collections import ChainMapdict1 = {'a': 1, 'b': 2}dict2 = {'b': 20, 'c': 3}combined = ChainMap(dict1, dict2)for key, value in combined.items(): print(f"{key}: {value}") # 输出: 'a': 1, 'b': 2, 'c': 3('b'取自dict1)效率对比
仅需键时,直接迭代字典或keys()最快。
仅需值时,values()最直接。
同时需要键值对时,items()效率最高(避免重复哈希查找)。
代码可读性优先除非处理超大规模字典,否则应优先选择逻辑清晰的遍历方式,而非过度优化性能。例如,字典推导式在可读性和简洁性上通常优于传统循环。