2012-08-13 26 views
13

Eventuali duplicati:
In Python how do I sort a list of dictionaries by values of the dictionary?
Sorting Python dictionary based on nested dictionary valuesCome ordinare un dizionario Python in base al valore?

ho dizionario del modulo come indicato di seguito:

a_dict = { 'e': (1, 100), 'a': (2, 3) } 

non sono in grado di risolvere da parte del secondo elemento della tupla. Il dizionario risultante apparirà come di seguito:

a_dict = { 'a': (2, 3), 'e': (1, 100) } 
+0

@Tichodroma: questo è un elenco di d ictionaries, questo è solo * un * dizionario, non in una lista. –

risposta

12

dizionari non possono essere ordinati come tale, ma è possibile ordinare il loro contenuto:

sorted(a_dict.items(), key=lambda (k, (v1, v2)): v2) 
sorted(a_dict.items(), key=lambda item: item[1][1]) # Python 3 

È possibile inserire i risultati in un collections.OrderedDict (dal 2,7):

OrderedDict(sorted(a_dict.items(), key=lambda (k, (v1, v2)): v2)) 
OrderedDict(sorted(a_dict.items(), key=lambda item: item[1][1]) # Python 3 
+3

L'argomento decompressione eseguito in lambda funzionerà solo in Python 2.x. In Python 3 dovrai fare 'key = lambda k, v: v [1]'. – Blckknght

1

Nel tuo esempio si utilizza elenco dei dizionari. Ordinamento dict per chiave:

mydict = {'carl':40, 
      'alan':2, 
      'bob':1, 
      'danny':3} 

for key in sorted(mydict.iterkeys()): 
    print "%s: %s" % (key, mydict[key]) 

alan: 2 
bob: 1 
carl: 40 
danny: 3 

Se si desidera ordinare dict per valore, vedere Sort a Python dictionary by value

+1

A quale elenco di dizionari si riferisce? Il codice nella domanda ha un dizionario con tuple come valori e nessun elenco. – Blckknght

+0

Certo che hai ragione. Ho fatto uno stupido errore. – ymn

Problemi correlati