【问题标题】:Changing key name in OrderedDict in a loop cause RuntimeError: OrderedDict mutated during iteration在循环中更改 OrderedDict 中的键名会导致 RuntimeError: OrderedDict 在迭代期间发生突变
【发布时间】:2021-10-29 03:45:56
【问题描述】:

考虑以下问题,我有一个 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 python-3.x ordereddict


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2013-05-09
      • 2022-10-25
      • 2022-01-18
      • 1970-01-01
      • 2015-09-28
      相关资源
      最近更新 更多