2013-03-25 13 views
16

ho provato a ordinare in base al tasto ma nessuna possibilità. questo è il mio dict:Python: Come ordinare un dizionario con il tasto

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

sto usando Python2.7 e ho trovato questo

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

, ma questo non è quello che mi aspettavo, ho un dict non differenziati.

risposta

7

I dizionari Python standard sono intrinsecamente non ordinati. Tuttavia, è possibile utilizzare collections.OrderedDict. Conserva l'ordine di inserimento, quindi tutto quello che dovete fare è aggiungere le coppie chiave/valore nell'ordine desiderato:

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

e se avevo 1000 coppie di (chiave, valore) ?? – Imoum

+0

cosa fare se devo ordinare 'OrderedDict ([('1', 'valore1'), ('2', 'valore2')])' in ordine inverso per 'valore *' –

2

Python dizionari sono non ordinata (per definizione)

È possibile utilizzare OrderedDict invece

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

Questa uscita volontà allineati risultati, ma il dizionario rimarranno non differenziati. Se si desidera mantenere l'ordinazione di un dizionario, utilizzare OrderedDict

In realtà, se si ordina per chiave si può saltare la parte key=..., perché allora gli elementi ripetuti sono ordinati prima con chiave e successivamente per valore (usi quello NPE nella sua risposta)

+0

io personalmente andare per 'key = lambda (key, val): val)', che è anche corretto, ma IMHO anche più esplicito –

+1

@JonClements che è deprecato in python 3 quindi l'approccio attuale è migliore – jamylak

+0

@jamylak: perché è deprecato? Eventuali riferimenti? –

Problemi correlati