字典在迭代期间改变了大小,在深度复制之后,python
dictionary changed size during iteration, after deepcopy, python
我有一个列表,是我使用 deepcopy 复制的。在上面的函数中,我有另一个列表,它也使用深层复制并按预期工作。尽管对于下面的代码,我得到一个 RuntimeError: dictionary changed size during iteration。不确定为什么会发生这种情况,因为我正在复制原始列表,然后对复制的列表进行 运行 修改。数据对象是列表中的字典。
amdcount = 0
with open('amd3.json', 'r') as b:
data = json.load(b)
newlist.append(data)
copylist = copy.deepcopy(new_list)
for item in copylist:
for k in item:
if k == 'minute':
item['test'] = 'test'
print(k, item[k])
以上代码生成了一个运行时错误:字典在迭代期间改变了大小。
当您执行 item['test'] = 'test'
时,您正在修改 item
字典,同时您使用 for k in item:
对其进行迭代
您可以使用 list(item)
:
复制字典键
for k in list(item):
if k == 'minute':
item['test'] = 'test'
print(k, item[k])
虽然还不清楚为什么需要循环。可以只是
if 'minute' in item:
item['test'] = 'test'
print('minute', item['minute'])
我有一个列表,是我使用 deepcopy 复制的。在上面的函数中,我有另一个列表,它也使用深层复制并按预期工作。尽管对于下面的代码,我得到一个 RuntimeError: dictionary changed size during iteration。不确定为什么会发生这种情况,因为我正在复制原始列表,然后对复制的列表进行 运行 修改。数据对象是列表中的字典。
amdcount = 0
with open('amd3.json', 'r') as b:
data = json.load(b)
newlist.append(data)
copylist = copy.deepcopy(new_list)
for item in copylist:
for k in item:
if k == 'minute':
item['test'] = 'test'
print(k, item[k])
以上代码生成了一个运行时错误:字典在迭代期间改变了大小。
当您执行 item['test'] = 'test'
时,您正在修改 item
字典,同时您使用 for k in item:
您可以使用 list(item)
:
for k in list(item):
if k == 'minute':
item['test'] = 'test'
print(k, item[k])
虽然还不清楚为什么需要循环。可以只是
if 'minute' in item:
item['test'] = 'test'
print('minute', item['minute'])