在不丢失订单的情况下更改OrderedDict中的密钥

时间:2012-08-27 23:22:31

标签: python ordereddictionary

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

是否可能以

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

确保'__C__'项目在'b'之前和'a'之后,即保持订单?

2 个答案:

答案 0 :(得分:14)

你可以尝试:

>>> 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)])

答案 1 :(得分:5)

如果你想改变当前的字典对象:

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

这可以通过迭代整个OrderedDict(使用其长度)和pop'ing its first item(通过将False传递给.popitem()来实现:此方法的默认设置是弹出最后一项)分为kv(分别代表);然后在OrderedDict的末尾插入此键/值对或新键及其原始值。

通过对dict的整个大小重复此逻辑,它可以有效地完全旋转dict,从而重新创建原始顺序。