29

从...开始

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

有可能最终得到

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

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

4

2 回答 2

25

你可以试试:

>>> 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)])
于 2012-08-27T23:29:06.757 回答
10

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

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(使用它的长度)并将其第一项(通过传递False.popitem():此方法的默认值是弹出最后一项)弹出到kv(分别代表keyvalue)中来工作;然后在OrderedDict.

通过对字典的整个大小重复这个逻辑,它有效地完全旋转了字典,从而重新创建了原始顺序。

于 2013-07-19T13:14:42.573 回答