繁体   English   中英

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

[英]RuntimeError: dictionary changed size during iteration - how to solve?

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

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应用程序不是理想的,但是现在就可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM