【发布时间】:2019-06-19 04:33:18
【问题描述】:
我在 python 2 中使用过:
d = {'a': 1, 'b': 2, 'c': 3}
for k in d.keys():
d[k] = d[k] * 2
print(d)
# {'a': 2, 'b': 4, 'c': 6}
在 python 3 中我使用:
d = {'a': 1, 'b': 2, 'c': 3}
for k in d:
d[k] = d[k] * 2
print(d)
# {'a': 2, 'b': 4, 'c': 6}
这种新语法让我感觉我正在迭代某些东西(字典)并对其进行修改,这很糟糕。但实际上我只是在遍历键,所以这应该不会带来任何麻烦,对吧?
【问题讨论】:
-
但是.. 在第一个示例中,您还修改了该字典。
-
由于您只是在迭代密钥,我认为这在某种程度上相当于
for i in range(len(lst)): lst[i] = lst[i] * 2。所以这应该不是问题,因为键(和键的散列)保持不变。 -
@matiit 是的,除了它的编写方式没有任何改变,这让我想知道我是否违反了“不要修改你正在通过规则迭代的东西”
-
“for key in dict”语法在 Python 2 中同样有效(它已经存在多年了,真的),并且是迭代 dict 键的推荐方式...
-
@brunodesthuilliers 确实!我在使用 Python 2 时似乎不知道它:)
标签: python dictionary iteration