当前位置: 首页 > 面试题库 >

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

葛阳
2023-03-14
问题内容

我已经检查了所有其他问题,并发现了相同的错误,但没有找到有帮助的解决方案= /

我有一个字典列表:

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

其中某些值为空。创建这些列表结束时,我想在返回字典之前删除这些空列表。当前,我正在尝试执行以下操作:

for i in d:
    if not d[i]:
        d.pop(i)

但是,这给了我运行时错误。我知道您无法在字典中进行迭代时添加/删除字典中的元素…那么解决这个问题的方法是什么?


问题答案:

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

for i in d.keys():

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

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

for i in list(d):


 类似资料:
  • 问题内容: 我有这样的obj 它应该扩展到 我在下面编写了代码,按拆分,删除旧键,如果包含则追加新键,但是它说 对于obj.iteritems()中的k,v: RuntimeError:词典在迭代过程中更改了大小 问题答案: 就像消息说的那样:在循环遍历expand中的这些条目的过程中,您更改了expandField()内部obj中的条目数。 您可以尝试创建所需形式的新字典,或者以某种方式记录要进

  • 问题内容: 我想在字典中弹出所有较大的值及其键,并保持最小的值。这是我程序的一部分 导致 如何避免此错误? 问题答案: 替代解决方案 如果您正在寻找字典中的最小值,则可以执行以下操作: 如果不能使用min,则可以使用sorted: 为什么会出现此错误? 附带说明一下,您遇到的原因是,在内部循环中您修改了外部循环所基于的迭代器。当您尚未由外部循环访问的条目并且外部迭代器到达该条目时,它将尝试访问已删

  • 我正在运行一个pyspark脚本,在下面遇到了一个错误。由于我的代码“如果len(RDD.Take(1))>0:”,它似乎在说“RuntimeError:在迭代期间设置更改的大小”。我不确定这是不是真正的原因,不知道到底出了什么问题。任何帮助都将不胜感激。 谢谢! 第65行,在调用r=self.func(t,*rdds)文件“/usr/lib/spark/python/lib/pysspark.z

  • 问题内容: 我有一个包含一些键(字符串)和值(POJO)的地图 我想遍历此映射并更改POJO中的某些数据。 我继承的当前代码将删除给定的条目,并在对POJO进行一些更改后将其重新添加。 这不能很好地进行,因为在遍历地图时您不应该修改地图(方法已同步,但ConcurrentModificationException仍然出现) 我的问题是 ,如果我需要遍历地图并更改值,我可以使用的最佳实践/方法是什么

  • 问题内容: 是否可以在迭代过程中更改同一HashMap实例的键?因为地图条目集没有方法entry.setKey()。现在我能想到的是创建另一个HashMap … 问题答案: 您应该将信息保留在其他集合中,以便在迭代后对其进行修改。您只能在迭代器期间使用删除条目。合同禁止在迭代过程中对其进行更改。

  • 问题内容: 我听说可以通过避免字典查找来加快对象的速度。我的困惑来自Python是一种动态语言。在静态语言中,我们通过进行编译时优化将索引保存在我们运行的指令中,从而避免了字典查找。 现在,在Python中,可以很容易地成为另一个具有字典或一组不同属性的对象。看来我们仍然需要进行字典查找- 唯一的区别似乎是我们只需要为该类使用一个字典,而不是为每个对象使用字典。 有了这种理性, 如何避免字典查找?