Skip to main content
 首页 » 编程设计

python之dict 在迭代期间改变了大小,但没有在 Python 中编辑它

2025年05月04日31jillzhang

我在 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]