2016-04-10 21 views
1

ここでは、Pythonで辞書辞書変数の順序を変更する方法を知っています。 私はキーリストの順序を変更しようとしましたが、辞書の順序は変更されませんでした。例えばOrderedDictの順序を変更する方法は?

iは[ 'E'、 'A'、 'B'、 'C​​'、 'D']の代わりに[ 'A'、 'B' にD
の順序を変更します、 'C'、 'D'、 'E']

d = collections.OrderedDict() 
d['a'] = 'A' 
d['b'] = 'B' 
d['c'] = 'C' 
d['d'] = 'D' 
d['e'] = 'E' 

答えて

0

はあなたがdと同じ型の新しいオブジェクトを作成する必要があり、別のOrderedDict

new_keys = ['e','a','b','c','d'] 
new_dict = collections.OrderedDict() 
for i in new_keys: 
    new_dict[i] = d[i] 
2

を作成する必要があります。ここで私はあなたのpython3を使用している場合は、必ずしも新しい辞書を作成する必要はありませんこの場合には、もちろん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')]) 
0

あるtype(d)を使用しています。

あなたはOrderedDict.move_to_endを使用することができます。

が発注した辞書のどちらかの端に既存のキーを移動し

。 lastがtrue(デフォルト)の場合は右端に、最後が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')]) 
関連する問題