Python遍历字典添加Country键时报RuntimeError错误该如何解决?
错误原因
你遇到的RuntimeError: dictionary changed size during iteration报错,核心原因是Python禁止在遍历原生字典的过程中修改字典的大小:字典迭代器是基于遍历开始时的字典结构生成的,遍历过程中如果执行新增、删除键的操作,会导致迭代器的遍历逻辑和实际字典结构不匹配,因此Python直接抛出该错误终止运行。
你当前代码就是在for keys in dictionary_of_spliting遍历字典本身的过程中,执行dictionary_of_spliting["Country"] = "France"新增键的操作,直接触发了该规则。另外你代码中未定义变量var,即使不触发字典报错,运行也会抛出NameError。
实现方案
方案1:无需遍历字典的最优写法
如果你的需求只是给字典加固定键值对,不需要遍历字典做额外判断,完全可以删除冗余的for循环,直接赋值即可:
dictionary_of_spliting = {"Food":"Honey", "Trash1":"some", "Trash2":"some", "Trash3":"your", "Thing":"resorces"} var = 10 # 自行根据业务需求给var赋值 if var <= 12: dictionary_of_spliting["Country"] = "France"
方案2:确需遍历字典的兼容写法
如果业务逻辑要求必须先遍历字典做其他判断,遍历的时候不要直接遍历字典本身,遍历字典键的静态列表即可,遍历过程中修改原字典不会触发报错:
dictionary_of_spliting = {"Food":"Honey", "Trash1":"some", "Trash2":"some", "Trash3":"your", "Thing":"resorces"} var = 10 # 把字典的键转成固定列表,遍历列表不会受原字典修改影响 for key in list(dictionary_of_spliting.keys()): # 此处可添加你需要的遍历处理逻辑 if var <= 12: dictionary_of_spliting["Country"] = "France"
注意:上述
dictionary_of_spliting["Country"] = "France"赋值不需要放在循环内重复执行,建议放到循环外减少无效操作。
内容的提问来源于stack exchange,提问作者NotTadej
相关产品推荐
相关产品推荐

