在循环中更改OrderedDict中的键名会导致RuntimeError: OrderedDict在迭代期间发生突变.&



考虑以下问题,我有一个OrderedDict,并且只想更改键的名称。我们可以使用以下命令逐行执行:

od[new_key] = od.pop(old_key)

然而,如果我尝试在循环中执行,我会得到RuntimeError: OrderedDict mutated during iteration

下面是重现这个问题的一个简短示例:

from collections import OrderedDict

od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
od['d'] = 4 
for key in od.keys():
od[key+"_"] = od.pop(key)  

你怎么解决这个问题?

您正在尝试修改您正在迭代的字典(字典键),这是不允许的。类似于你不能修改你正在迭代的Python列表的内容。

为字典键创建一个列表,遍历该列表并更新字典键。

my_dic_keys = list(od.keys())
for key in my_dic_keys:
od[key+"_"] = od[key]
del od[key]

您应该为od.keys()使用list()来创建od.keys()的复制对象,如下所示:

from collections import OrderedDict

od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
od['d'] = 4 
# ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
for key in list(od.keys()):
od[key+"_"] = od.pop(key)

最新更新