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

如何避免“ RuntimeError:字典在迭代期间更改大小”错误?

如何避免“ RuntimeError:字典在迭代期间更改大小”错误?

红糖糍粑 2019-12-09 14:24:56
我检查了所有其他问题,并发现了相同的错误,但没有找到有用的解决方案= /我有一个列表字典:d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}其中某些值为空。创建这些列表结束时,我想在返回字典之前删除这些空列表。当前,我正在尝试执行以下操作:for i in d:    if not d[i]:        d.pop(i)但是,这给了我运行时错误。我知道您无法在字典中进行迭代时添加/删除字典中的元素...那么解决这个问题的方法是什么?
查看完整描述

3 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

在Python 2.x中,调用keys会生成密钥的副本,您可以在修改时进行迭代dict:


for i in d.keys():

请注意,这在Python 3.x中不起作用,因为它keys返回迭代器而不是列表。


另一种方法是使用list强制复制密钥。这个也可以在Python 3.x中使用:


for i in list(d):


查看完整回答
反对 回复 2019-12-09
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

只需使用字典理解将相关项目复制到新字典中


>>> d

{'a': [1], 'c': [], 'b': [1, 2], 'd': []}

>>> d = { k : v for k,v in d.iteritems() if v}

>>> d

{'a': [1], 'b': [1, 2]}


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

添加回答

举报

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