2012-06-06 24 views
5

Ben sözlükleri Aşağıdaki listedeğerleri

benim hemen sıralayabilir nasıl
a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}] 

: Demek

a = [{43:123}, {3:103}, {36:103}, {2:102}, {23:100}] 

, onun dicts göre sıralamak için 'değerleri azalan düzende.

+0

yerine kullanmak (veya en azından akılda tutmak) olur. Bunun için daha iyi bir veri türü var mı? – tlunter

cevap

1

için list.sort() yöntemine key parametre geçirmek, böylece karşılaştırma key geri dönen değerinin bir fonksiyonu olarak yapılacaktır: Bu durumda,

>>> a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}] 
>>> a.sort(key=lambda d: d.values()[0], reversed=True) 
>>> a 
[{23: 100}, {2: 102}, {3: 103}, {36: 103}, {43: 123}] 

, anahtar bir sözlük bir fonksiyondur d ve değerinin bir listesini .values() ile alır. Sadece bir değer olduğu için, bu sadece geri dönen listeden bir değer elde ederiz. Ardından, list.sort() yöntemi, sıralama yaparken, sözlüklerin kendileri yerine döndürülen değerleri karşılaştırır.

Hemen hemen
sorted(a, key=dict.values, reverse=True) 

aynı şey, ama muhtemelen daha deyimsel:

+0

Bu, artan sırayla bir çeşit ver, OP'nin düşürülmesini istedi. – raym0nd

+2

@ raym0nd tamam, tamir etmeliyim, her ne kadar yine de HodfHod çözümünü tercih ederim diyeyim :) – brandizzi

3
>>> sorted(a, key=lambda i: i.values()[0], reverse=True) 
[{43: 123}, {3: 103}, {36: 103}, {2: 102}, {23: 100}] 
6

brandizzi cevabı ek olarak, birlikte gidebiliriz.

+0

+1 Buna katılıyorum, bu soru, yalnızca ilk öğenin sıralama için kullanılmadığını belirtmedikçe, daha iyi bir yanıttır. – jamylak

+0

hey, nasıl sıralı int 'a' dict değer ayıklayabilirim? , ör. 'içinde b için: bir [i] .keys() i + = 1 ' yazdı, ancak python hala bir liste olduğunu söylüyor, int recive gerekir. Nasıl yapabilirim ? – user1403568

+0

@ user1403568, b için şunu deneyin: print b.keys() [0] '. tuşları çıkaracaksınız, yani baskıyı bitireceksiniz: 43, 3, 36, 2, 23. Eğer bunun yerine değerler istiyorsanız (123,103,36,102,100 gibi), 'b.values ​​() [0]' kullanın. – HodofHod

0

O sözlükleri her biri farklı anahtarlara sahip .itervalues()

In [25]: sorted(a, key=lambda x: x.itervalues().next, reverse=True) 
Out[25]: [{43: 123}, {36: 103}, {2: 102}, {23: 100}, {3: 103}]