[英]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.