假设我们有一个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。这个定义好吗?您能否提供一些参考来支持您的答案?(很明显,如果损坏了该如何解决,所以这不是我所追求的角度。)
3 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
在python文档页面(针对python 2.7)上明确提到了
使用
iteritems()
而添加或删除字典条目可能会产生一种RuntimeError
或无法遍历所有条目。
对于Python 3同样如此。
这同样适用于iter(d)
,d.iterkeys()
与d.itervalues()
,我会去远的话说,它为for k, v in d.items():
(我不记得到底是什么for
呢,但是如果叫我执行也不会感到惊讶iter(d)
)。
紫衣仙女
TA贡献1839条经验 获得超15个赞
至少不能使用来做到这一点d.iteritems()
。我尝试了,Python失败了
RuntimeError: dictionary changed size during iteration
如果改用d.items()
,则可以使用。
在Python 3中,d.items()
就像d.iteritems()
在Python 2中一样,是字典的视图。要在Python 3中这样做,请使用d.copy().items()
。同样,这将允许我们迭代字典的副本,以避免修改正在迭代的数据结构。
添加回答
举报
0/150
提交
取消