我在 Python 中遇到 dict changed size during iteration 错误,即使我没有改变嵌套的字典。我要从原件中删除,而不是我正在循环播放的副本
test = arr.copy()
for map in test:
for mID in test[map]: #here is dictionary changed size during iteration
v = test[map][mID]['val']
if v < 1:
del arr[map][mID]
我是不是忽略了什么?
请您参考如下方法:
您正在复制字典,但使用的是浅拷贝。
由于您正在迭代子字典(未复制,arr 和 test 之间的引用相同),您会收到此错误。
像这样使用copy模块的deepcopy函数:
import copy
test = copy.deepcopy(arr)
然而,深度复制一个对象对于这样的问题来说是多余的。您可以像这样迭代项目的副本(另外:始终迭代键+值,这样您就不必在循环中通过键访问值):
for map,map_values in arr.items():
for mID,subdict in list(map_values.items()): # make a copy/force iteration using `list`
v = subdict['val']
if v < 1:
del map_values[mID]
