从
开始OrderedDict([('a', 1), ('c', 3), ('b', 2)])
是否可能以
结束OrderedDict([('a', 1), ('__C__', 3), ('b', 2)])
确保'__C__'
项目在'b'
之前和'a'
之后,即保持订单?
答案 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()
来实现:此方法的默认设置是弹出最后一项)分为k
和v
(分别代表键和值);然后在OrderedDict
的末尾插入此键/值对或新键及其原始值。
通过对dict的整个大小重复此逻辑,它可以有效地完全旋转dict,从而重新创建原始顺序。