2013-03-25 41 views
16

Dikkate göre anahtar sıralamaya çalıştım ama şans yok. bu benim dict aşağıdaki gibidir: i Python2.7 kullanıyorumPython: Bir sözlük anahtar ile nasıl sıralanır

result={'1':'value1','2':'value2',...} 

ve ben bu

keys = result.keys() 
keys.sort() 

bulundu ama bu ı i sıralanmamış dicti var beklediğim değil.

cevap

7

Standart Python sözlükleri doğal olarak sıralanmamıştır. Ancak, collections.OrderedDict'u kullanabilirsiniz.

In [4]: collections.OrderedDict(sorted(result.items())) 
Out[4]: OrderedDict([('1', 'value1'), ('2', 'value2')]) 
+1

1000 çift (anahtar, değer) vardı? – Imoum

+0

"OrderedDict ([('1', 'value1'), ('2', 'value2')])' i tersine sırayla 'value *' olarak sıralamak zorunda kalırsam ne yapmalıyım? –

8
sorted(result.iteritems(), key=lambda key_value: key_value[0]) 

çıktısı verir sonuçlarını sıralanmış

Sen OrderedDict kullanabilirsiniz (tanım için) sırasız fakat Sözlük sıralanmamış kalacaktır. Eğer bir sözlüğe sıralamasını korumak istiyorsanız sıralama eğer, daha sonra tekrarlanır öğeleri (Ne NPE kullandığı değeriyle ilk anahtar tarafından ve daha sonra sıralanır çünkü, key=... bölümü atlayabilirsiniz olabilir anahtar tarafından, Aslında OrderedDict

kullanmak onun cevabını kullanın)

+0

Ben şahsen anahtar = lambda (anahtar, val) 'için gitmek istiyorum: O kadar yapmanız gereken tüm istenen sırayla anahtar/değer çiftleri eklemek olduğunu ekleme siparişini korur val)' hangi ayrıca doğru, ama IMHO da daha açık –

+1

@JonClements python 3'de kullanımdan kaldırıldı, bu yüzden mevcut yaklaşım daha iyi – jamylak

+0

@jamylak: neden bu kullanımdan kaldırıldı? Herhangi bir referans? –

İlgili konular