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

时间:2019-02-10 19:57:57

标签: python pandas dictionary

我试图遍历字典并大写所有键(如果它们是字符串)。我为此遇到运行时错误:

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

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

2 个答案:

答案 0 :(得分:1)

您的词典有多大?如果不是很大,那么您可以这样做:

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}

答案 1 :(得分:0)

我通过以下方法解决了该问题:

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

str应用程序不是理想的,但是现在可以使用。