Python中字典遍历可通过默认键遍历、.values()遍历值、.items()遍历键值对实现,需注意遍历时修改字典的错误、大型字典的内存优化、顺序依赖及部分遍历的技巧。
1. 基础遍历方法- 默认遍历键:直接遍历字典对象,默认获取所有键。my_dict = {'a': 1, 'b': 2, 'c': 3}for key in my_dict: print(key) # 输出:a, b, c
- 遍历值:使用.values()方法。for value in my_dict.values(): print(value) # 输出:1, 2, 3
- 遍历键值对:使用.items()方法,同时获取键和值。for key, value in my_dict.items(): print(f"Key: {key}, Value: {value}") # 输出:Key: a, Value: 1 等
2. 遍历时修改字典的注意事项- 直接修改会报错:遍历过程中修改伏敬字典(如删除键)会触发RuntimeError: dictionary changed size during iteration。# 错误示例for key in my_dict: if my_dict[key] == 2: del my_dict[key] # 报错!
- 正确做法:
复制键后操作:先收集需要修改的键,遍历完成后统一处理。keys_to_delete = []for key, value in my_dict.items(): if value == 2: keys_to_delete.append(key)for key in keys_to_delete: del my_dict[key]print(my_dict) # 输出:{'a': 1, 'c': 3}
使用字典推导式生成新字典:new_dict = {k: v for k, v in my_dict.items() if v != 2}print(new_dict) # 输出:{'a': 1, 'c': 3}
3. 大型字典的遍历优化- 使用视图对象(Python 3.x):.keys()、.values()、.items()返回视图对象(类似迭代器),避免生成完整列表,节省内存。for key in my_dict.keys(): print(key) # 逐个访问键for value in my_dict.values(): print(value) # 逐个访问值for key, value in my_dict.items(): print(f"Key: {key}, Value: {value}") # 逐个访问键值对
- Python 2.x的替代方案:使用iterkeys()、itervalues()、iteritems()(Python 3已移缺旅慎除)。
4. 字典遍历顺序- Python 3.7+:字典保持插入顺序,遍历顺序与插入顺序一致。
- Python 3.6及之前:字典无序,需使用collections.OrderedDict保证顺序。from collections import OrderedDictordered_dict = OrderedDict([('a', 1), ('b', 2), ('c', 3)])for key, value in ordered_dict.items(): print(f"Key: {key}, Value: {value}") # 输出顺镇陆序固定
5. 部分键值对的遍历- 条件过滤:通过if语句筛选满足条件的键值对。my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}for key, value in my_dict.items(): if value > 2: print(f"Key: {key}, Value: {value}") # 输出:Key: c, Value: 3; Key: d, Value: 4
- 使用itertools限制数量:结合itertools.islice遍历前N个键值对。import itertoolsfor key, value in itertools.islice(my_dict.items(), 2): print(f"Key: {key}, Value: {value}") # 输出:Key: a, Value: 1; Key: b, Value: 2
总结- 基础遍历:默认键、.values()值、.items()键值对。
- 修改安全:避免直接遍历时修改,优先复制键或使用推导式。
- 性能优化:大型字典用视图对象(.keys()等)减少内存占用。
- 顺序控制:Python 3.7+依赖插入顺序,旧版本用OrderedDict。
- 部分遍历:结合条件判断或itertools实现灵活筛选。