2013-03-25 33 views
16

próbowałem uporządkować dict przez klucz, ale nie ma szans. to moja DICT:Python: Jak sortować słownika według klucza

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

używam Python2.7 i znalazłem ten

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

ale nie jest to, czego się spodziewałem, mam niesegregowanych dict.

Odpowiedz

7

słowniki standardowa Pythona są z natury nieuporządkowane. Można jednak użyć collections.OrderedDict. Zachowuje kolejność wstawiania, więc wszystko co musisz zrobić, to dodać pary klucz/wartość w żądanej kolejności:

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

nuż Miałem 1000 par (klucz, wartość)? – Imoum

+0

co zrobić, jeśli mam do sortowania 'OrderedDict ([('1', 'wartość1'), ('2', 'wartość2')])' w odwrotnej kolejności przez '*' wartości –

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

Wyjście wola sortowane wyniki, ale słownika pozostanie bez sortowania. Jeśli chcesz zachować kolejność słownika, należy OrderedDict

Właściwie, jeśli sortować według kluczowego można pominąć key=... część, bo wtedy iterowane elementy są sortowane najpierw przez klucz, a później przez wartość (używa co NPE w swojej odpowiedzi)

+0

bym osobiście pójść na 'key = lambda (klucz, val): val)', która jest również poprawna, ale IMHO również bardziej wyraźne –

+1

@JonClements że jest przestarzałe w Pythonie 3 więc obecne podejście jest lepsze – jamylak

+0

@jamylak: dlaczego tak jest przestarzała? Wszelkie referencje? –

Powiązane problemy