2012-08-13 18 views
13

Powiel możliwe:
In Python how do I sort a list of dictionaries by values of the dictionary?
Sorting Python dictionary based on nested dictionary valuesJak sortować słownik Pythona według wartości?

mam słownika postaci jak wymienione poniżej:

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

nie jestem w stanie rozwiązać go przez drugiego elementu krotki. Powstały słownika pojawi się jak poniżej:

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

@Tichodroma: to jest lista d Słowniki, to tylko * jeden * słownik, nie na liście. –

Odpowiedz

12

Słowniki nie mogą być klasyfikowane jako takie, ale można uporządkować ich zawartość:

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

Możesz umieścić wyniki do collections.OrderedDict (od 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

Rozpakowanie argumentu wykonane w lambda będzie działać tylko w Pythonie 2.x. W Pythonie 3 musisz wykonać 'key = lambda k, v: v [1]'. – Blckknght

1

W przykładzie używasz listę słowników. Sortowanie dict przez klucz:

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 

Jeśli chcesz sortować według wartości dict, proszę zobaczyć Sort a Python dictionary by value

+1

Jakiej listy słowników się powołujesz? Kod w pytaniu ma słownik z krotkami jako wartościami i bez żadnych list. – Blckknght

+0

Oczywiście masz rację. Popełniłem głupi błąd. – ymn

Powiązane problemy