【问题标题】:Why am I receiving this error- dictionary changed size during iteration? [duplicate]为什么我会在迭代期间收到此错误 - 字典大小更改? [复制]
【发布时间】:2021-12-29 23:08:18
【问题描述】:

每当我运行以下代码时,我都会在迭代期间收到字典大小更改的错误。我只是想将一个列表放入字典中,键是列表中的元素,值是计数(出现的次数)。

我希望输出是最大值 - 每个值。如果最大值等于字典中的任何值,则将其删除。

这是我的代码:

from collections import Counter


elements=["a", "b", "abc", "c", "a"]

z=Counter(elements)
q=max(z.values()) #get max number

for x in z:
    if z[x] < q:
        z[x] = q-z[x]
    else:
        del z[x] #I am getting an error because of this line of code.
        
print(z)

关于如何解决此错误的任何想法,以便输出如下所示:

{'b': 1, 'abc': 1, 'c': 1}

【问题讨论】:

  • 您是否会收到此错误,因为您在迭代字典时从字典中删除了一个项目?从字典中删除一个项目会改变字典的大小(它会减小 1)。
  • 列出要删除的键并在循环后将其删除。

标签: python python-3.x collections


【解决方案1】:

您收到该错误是因为字典在您迭代时改变了大小;这会弄乱迭代器。

简单的解决方案是制作一个新字典,如下所示:

z = {x: q - z[x] for x in z if z[x] < q}

【讨论】:

  • 短一点,如果他们不介意以计数器结束:z = Counter(dict.fromkeys(z, q)) - z
猜你喜欢
  • 2019-12-02
  • 1970-01-01
  • 2017-07-16
  • 2021-11-21
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
相关资源
最近更新 更多