RuntimeError: dictionary changed size during iteration - how to solve?
我正试图遍历一本字典,如果所有的键都是字符串,那么就将它们大写。我收到一个运行时错误:
1 2 3 4 5 | for k, v in ref_dict.items(): if isinstance(k, str): ref_dict[k.upper()] = v else: ref_dict[k] = v |
我该如何避免这样的事情?或者,更好的方法是,如何改进代码以更优雅地解决这个问题?
你的口述有多大?如果不是很大,那么你可以:
1 2 3 4 5 6 7 8 | 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 |
在另一种情况下,您可能需要检查您创建的
另外,您还可以修改原始代码,如下更改
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 2 | final_dict = dict((str(k).upper(), v) for k, v in ref_dict.items()) return final_dict |