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

问题描述 投票:16回答:2

从...开始

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

有可能最终结束

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

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

python ordereddictionary
2个回答
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)])

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,从而重新创建原始顺序。

© www.soinside.com 2019 - 2024. All rights reserved.