在迭代时修改Python字典

假设我们有一个Python字典d,我们正在像这样迭代它:

for k,v in d.iteritems():
    del d[f(k)] # remove some item
    d[g(k)] = v # add a new item

f并且g仅仅是一些黑盒转换。)

换句话说,我们尝试d在使用对其进行迭代的同时向其中添加/删除项目iteritems

这个定义好吗?您能否提供一些参考来支持您的答案?

(很明显,如果损坏了该如何解决,所以这不是我所追求的角度。)


偶然的你
浏览 883回答 3
3回答

一只名叫tom的猫

在python文档页面(针对python 2.7)上明确提到了使用iteritems()而添加或删除字典条目可能会产生一种RuntimeError或无法遍历所有条目。对于Python 3同样如此。这同样适用于iter(d),d.iterkeys()与d.itervalues(),我会去远的话说,它为for k, v in d.items():(我不记得到底是什么for呢,但是如果叫我执行也不会感到惊讶iter(d))。

紫衣仙女

至少不能使用来做到这一点d.iteritems()。我尝试了,Python失败了RuntimeError: dictionary changed size during iteration如果改用d.items(),则可以使用。在Python 3中,d.items()就像d.iteritems()在Python 2中一样,是字典的视图。要在Python 3中这样做,请使用d.copy().items()。同样,这将允许我们迭代字典的副本,以避免修改正在迭代的数据结构。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python