我有一种非常奇怪的担忧,就是这样:
for k, v in ((k, v) for k, v in mydict.iteritems() if v.update):
print k
del mydict[k]
我非常清楚我们不应该在迭代期间更改字典的键。 但是我期待一个" RuntimeError:字典在迭代期间改变了大小"没别的了。 我有时会得到一个价值,有时候什么都没有......
Osx上的Python v2.7.10
答案 0 :(得分:0)
为我打破:
>>> mydict = {'a':1, 'b':10}
>>> for k, v in ((k, v) for k, v in mydict.iteritems() if v > 5):
... print k
... del mydict[k]
b
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
...
显然将其更改为items()
可解决此问题:
>>> mydict = {'a':1, 'b':10}
>>> for k, v in ((k, v) for k, v in mydict.items() if v > 5):
... print k
... del mydict[k]
b
>>> mydict
{'a': 1}
但循环中的条件更清晰:
>>> mydict = {'a':1, 'b':10}
>>> for k, v in mydict.items():
... if v > 5:
... print k
... del mydict[k]
b
>>> mydict
{'a': 1}
或者词典理解:
>>> mydict = {'a':1, 'b':10}
>>> {k: v for k, v in mydict.iteritems() if not v > 5}
{'a': 1}