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:字典迭代过程中改变大小 - 如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
字典遍历过程中修改字典元素,报错 RuntimeError: dictionary changed size during iteration
Python面试题目之(针对dict或者set数据类型)边遍历 边修改 报错dictionary changed size during iteration
RuntimeError:在 Rack 中的迭代期间无法将新密钥添加到哈希中
是否有解决方案绕过“无法在迭代期间将新密钥添加到哈希(RuntimeError)”?
在循环中更改 OrderedDict 中的键名会导致 RuntimeError: OrderedDict 在迭代期间发生突变