2016-04-10 14 views
1

Dosieren Sie hier, wie Sie die Reihenfolge der Order-Dictionary-Variablen in Python ändern können. Ich habe versucht, die Reihenfolge der Schlüsselliste zu ändern, aber es hat die Reihenfolge des Wörterbuchs nicht geändert.Wie ändert man die Reihenfolge von OrderedDict?

Zum Beispiel möchte ich die Reihenfolge des d ändern
auf [ 'e', ​​'a', 'b', 'c', 'd'] anstelle von [ 'a', 'b' , 'c', 'd', 'e']

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

Antwort

0

Sie eine andere OrderedDict

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

Sie müssen erstellen müssen, um ein neues Objekt des gleichen Typs wie d zu erstellen. Hier verwende ich type(d) was natürlich OrderedDict in diesem Fall

>>> 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

Wenn Sie python3 verwenden Sie nicht unbedingt ein neues Wörterbuch erstellen müssen.

Sie können OrderedDict.move_to_end verwenden:

an jedem Ende eines geordneten Wörterbuch Verschieben eines vorhandenen Schlüssel. Das Element wird an das rechte Ende verschoben, wenn der letzte Wert wahr ist (der Standardwert), oder an den Anfang, wenn der letzte Wert falsch ist. KeyError wirft, wenn der Schlüssel nicht < existiert ... bietet example>

Beispiel (e Bewegen von Wörterbuch starten Sie Ihren Ausgang zu erreichen):

>>> 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')]) 
Verwandte Themen