为了账号安全,请及时绑定邮箱和手机立即绑定

在迭代时修改Python字典

在迭代时修改Python字典

偶然的你 2019-09-26 10:20:17
假设我们有一个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))。


查看完整回答
反对 回复 2019-09-26
?
紫衣仙女

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()。同样,这将允许我们迭代字典的副本,以避免修改正在迭代的数据结构。


查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 882 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信