这里的任何人都知道如何在python中更改订单字典变量的顺序。 我试图更改密钥列表的顺序,但它没有改变字典的顺序。
例如,我想更改 d 的顺序 到['' a'' b',' c'' d']而不是[ ' A'' b'' C'' d'' E&#39]
ArrayList
答案 0 :(得分:2)
您需要创建与d相同类型的新对象。在这里我使用type(d)
,在这种情况下当然是OrderedDict
>>> import collections
>>> d = collections.OrderedDict()
>>> d['a'] = 'A'
>>> d['b'] = 'B'
>>> d['c'] = 'C'
>>> d['d'] = 'D'
>>> d['e'] = 'E'
>>> new_order = ['e','a','b','c','d']
>>> type(d)((k, d[k]) for k in new_order)
OrderedDict([('e', 'E'), ('a', 'A'), ('b', 'B'), ('c', 'C'), ('d', 'D')])
答案 1 :(得分:1)
如果您使用的是python3,则不必须创建新词典。
您可以使用OrderedDict.move_to_end
:
将现有密钥移动到有序字典的任一端。如果last为true(默认值),则项目移动到右端;如果last为false,则移动到开头。如果密钥不存在则引发KeyError< ...提供示例>
示例(将e
移动到字典的开头以实现输出):
>>> d = OrderedDict()
>>> for c in 'ABCDE':
... d[c.lower()] = c
...
>>> d
OrderedDict([('a', 'A'), ('b', 'B'), ('c', 'C'), ('d', 'D'), ('e', 'E')])
>>> d.move_to_end('e',last=False) # last=False moves to beginning
>>> d
OrderedDict([('e', 'E'), ('a', 'A'), ('b', 'B'), ('c', 'C'), ('d', 'D')])