gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:50 25 4
gpt4 key购买 nike

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

我是不是忽略了什么?

最佳答案

您正在复制字典,但使用的是浅拷贝

由于您正在迭代子字典(未复制,arrtest 之间的引用相同),您会收到此错误。

像这样使用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]

关于python - dict 在迭代期间改变了大小,但没有在 Python 中编辑它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45713052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com