Python 运行时错误:在迭代过程中字典更改了大小-如何解决?
我试图遍历字典,如果所有键都是字符串,则将它们大写。我得到一个运行时错误:Python 运行时错误:在迭代过程中字典更改了大小-如何解决?,python,pandas,dictionary,Python,Pandas,Dictionary,我试图遍历字典,如果所有键都是字符串,则将它们大写。我得到一个运行时错误: for k, v in ref_dict.items(): if isinstance(k, str): ref_dict[k.upper()] = v else: ref_dict[k] = v 我如何避免这样的事情?或者,更好的是,如何改进代码以更优雅地解决此问题?您的dict有多大?如果不是很大,那么你可以: new_dict = {} for k, v in re
for k, v in ref_dict.items():
if isinstance(k, str):
ref_dict[k.upper()] = v
else:
ref_dict[k] = v
我如何避免这样的事情?或者,更好的是,如何改进代码以更优雅地解决此问题?您的dict有多大?如果不是很大,那么你可以:
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\u dict
。但值得一提的是,它将为ref\u 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
应用程序并不理想,但现在就可以了 这可能是我的建议,采用更好的python风格。您可以在ref\u dict.items()中对k,v执行final\u dict=dict((k.upper(),v),如果是instance(k,str),则执行其他(k,v)操作。
@quanghaang beautifuly。这太完美了!非常感谢。