我有一个非常奇怪的担忧,用这种方式:
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
我的突破:
>>> 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}