如何改变OrderedDict的顺序?

时间:2016-04-10 11:27:51

标签: python dictionary indexing

这里的任何人都知道如何在python中更改订单字典变量的顺序。 我试图更改密钥列表的顺序,但它没有改变字典的顺序。

例如,我想更改 d 的顺序 到['' a'' b',' c'' d']而不是[ ' A'' b'' C'' d'' E&#39]

ArrayList

2 个答案:

答案 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')])