Изменить ключ в OrderedDict без потери порядка

Начиная с

OrderedDict([('a', 1), ('c', 3), ('b', 2)])

можно ли положить

OrderedDict([('a', 1), ('__C__', 3), ('b', 2)])

убедитесь, что элемент '__C__' находится перед 'b' и после 'a' т.е. сохраняя порядок?

Ответ 1

Вы можете попробовать:

>>> d = OrderedDict([('a', 1), ('c', 3), ('b', 2)])
>>> d
OrderedDict([('a', 1), ('c', 3), ('b', 2)])
>>> d2 = OrderedDict([('__C__', v) if k == 'c' else (k, v) for k, v in d.items()])
>>> d2
OrderedDict([('a', 1), ('__C__', 3), ('b', 2)])

Ответ 2

если вы хотите изменить текущий объект словаря

change_key(dict, old, new):
    for i in range(len(dict)):
        k,v = self.popitem(False)
        self[new if old == k else k] = v