2016-04-10 38 views
1

Python'daki sipariş sözlük değişkenlerinin sırasını nasıl değiştireceğini öğrenmek için herhangi birini buraya bırakın. Anahtar listesinin sırasını değiştirmeyi denedim, ancak sözlüğün sırasını değiştirmedi.OrderedDict sırasını nasıl değiştirebilirim?

Örneğin I d sırasını değiştirmek isteyen [ 'e', ​​'a', 'b', 'c', 'd'] yerine [ 'a', 'b' ile
'c', 'd', 'e']

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

cevap

0

Sen d aynı türde yeni bir nesne oluşturmak için gereken başka bir OrderedDict

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

oluşturmak gerekir. İşte yapmanız python3 kullanarak mutlaka Yeni sözlük oluşturmak zorunda değildir ediyorsanız bu durumda

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

elbette OrderedDict arasında olan type(d) kullanın.

Sen OrderedDict.move_to_end kullanabilirsiniz:

sıralı sözlüğe ya da sonuna kadar varolan anahtarı taşıyın

. Son olarak doğruysa (varsayılan) ya da sonuncusu false ise, öğe sağ tarafa taşınır. Anahtar < yoksa ... KeyError Artırdı örnek>

Örnek (sizin çıkışı sağlayacak şekilde sözlüğü başlatmak için e hareketli) sağlamaktadır:

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