You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决迭代字典时出现‘dictionary changed size during iteration’错误?

解决"dictionary changed size during iteration"错误的两种方法

这个问题我之前调试代码时也踩过坑!报错的核心原因很明确:你在直接遍历字典本身的过程中修改了它的结构(删除键),Python的字典迭代器会依赖字典的大小保持稳定,一旦中途删改键值对,迭代器就会因为预期的结构被破坏而抛出这个错误。

针对你的需求,这里有两种靠谱的解决方案:

方法一:遍历字典键的副本

我们可以先把字典的键转换成一个列表(也就是原字典键的副本),这样遍历的是这个固定的列表,即使原字典在循环中被修改,也不会影响迭代过程:

from collections import Counter
elements=["a", "b", "abc", "c", "a"]
z=Counter(elements)
q=max(z.values()) #获取最大值
# 遍历字典键的副本,避免迭代时字典结构变化
for x in list(z):
    if z[x] < q:
        z[x] = q-z[x]
    else:
        del z[x]
print(z)

方法二:使用字典推导式(更Pythonic)

这种方式不需要修改原字典,而是直接通过推导式生成符合要求的新字典,代码更简洁高效,也是Python中处理这类字典转换场景的首选方式:

from collections import Counter
elements=["a", "b", "abc", "c", "a"]
z=Counter(elements)
q=max(z.values())
# 用字典推导式直接筛选并转换键值对
z = {k: q - v for k, v in z.items() if v < q}
print(z)

两种方法运行后都会输出你想要的结果:{'b': 1, 'abc': 1, 'c': 1}。如果你的后续操作还有更复杂的逻辑,方法一更灵活;如果只是当前的需求,方法二的代码可读性和效率都更高。

内容的提问来源于stack exchange,提问作者Coder123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:44:29