Python 中如何用 for 循环遍历字典?
Python 遍历字典的三种方式:直接遍历(得到键)、.items() 同时取键值(最常用)、.values() 只取值。Python 3.7+ 保持插入顺序。
最常用的是 for k, v in d.items():——同时拿到键和值。直接 for k in d: 遍历的是键,for v in d.values(): 只遍历值。
三种遍历方式
d = {'a': 1, 'b': 2, 'c': 3}
# 1. 遍历键(默认行为)
for k in d:
print(k, d[k])
# 2. 同时遍历键和值(推荐)
for k, v in d.items():
print(k, v)
# 3. 只遍历值
for v in d.values():
print(v)
遍历顺序
Python 3.7+ 起字典保持插入顺序,遍历顺序就是键值对添加的顺序(3.6 是实现细节,3.7 写入语言规范)。
注意事项
遍历时不要修改字典——增删键值对会抛 RuntimeError: dictionary changed size during iteration:
# 错误
for k in d:
if d[k] < 0:
del d[k]
# 正确:先收集再删除,或遍历副本
for k in list(d):
if d[k] < 0:
del d[k]
# 或用字典推导式重建
d = {k: v for k, v in d.items() if v >= 0}
常见问题(FAQ)
Q:for k in d 和 for k in d.keys() 有区别吗?
A:效果相同,前者更简洁。后者显式表达意图,且 .keys() 返回的视图可以做集合运算(如 d1.keys() & d2.keys() 求共有键)。
Q:如何按键排序后遍历?
A:for k in sorted(d): 按键排序;for k, v in sorted(d.items(), key=lambda x: x[1]): 按值排序。
Q:字典推导式过滤时遍历的是什么?
A:{k: v for k, v in d.items() if 条件},本质是 items() 遍历加条件过滤,返回新字典不影响原字典。