RuntimeError:字典迭代过程中改变大小 - 如何解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RuntimeError:字典迭代过程中改变大小 - 如何解决?相关的知识,希望对你有一定的参考价值。

我试图通过字典来遍历并利用所有的钥匙,如果他们都是字符串。我得到一个运行时错误此:

for k, v in ref_dict.items():
    if isinstance(k, str):
        ref_dict[k.upper()] = v
    else:
        ref_dict[k] = v

如何避免这样的事情?或者,更好的,我该如何改进代码以更优雅解决这个问题?

答案

你有多大的字典?如果不是巨大的,那么你可以这样做:

new_dict = {}
for k, v in ref_dict.items():
    if isinstance(k, str):
        new_dict[k.upper()] = v
    else:
        new_dict[k] = v

ref_dict = new_dict

在其他情况下,你可能需要查看您ref_dict的创作和修改关键在那里。

此外,如下改变ref_dict一个可以修改原来的代码。但值得一提的是它会加入新的元素ref_dict。例如

ref_dict = {'abc' : 1}

### change of code
keys = [k for key in ref_dict]

for k in keys:
    if isinstance(k, str):
        ref_dict[k.upper()] = ref_dict[k]
    # else part is not neccessary
    # else:
    #     ref_dict[k] = v

# now ref_dict = {'abc':1, 'ABC':1}
另一答案

我解决它通过这样做:

final_dict = dict((str(k).upper(), v) for k, v in ref_dict.items())
return final_dict

str应用并不理想,但它现在做的。

以上是关于RuntimeError:字典迭代过程中改变大小 - 如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

通过globals()字典迭代

字典遍历过程中修改字典元素,报错 RuntimeError: dictionary changed size during iteration

Python面试题目之(针对dict或者set数据类型)边遍历 边修改 报错dictionary changed size during iteration

RuntimeError:在 Rack 中的迭代期间无法将新密钥添加到哈希中

是否有解决方案绕过“无法在迭代期间将新密钥添加到哈希(RuntimeError)”?

在循环中更改 OrderedDict 中的键名会导致 RuntimeError: OrderedDict 在迭代期间发生突变