Mam słownik wartości odczytanych z dwóch pól w bazie danych: pole tekstowe i pole liczbowe. Pole ciągu jest unikalne, więc jest to klucz słownika.
Mogę posortować klucze, ale jak mogę sortować na podstawie wartości?
1 odpowiedź
Nie jest możliwe sortowanie słownika, tylko po to, aby uzyskać reprezentację posortowanego słownika. Słowniki są z natury pozbawione porządku, ale inne typy, takie jak listy i krotki, nie są. Potrzebny jest więc typ danych uporządkowany, aby reprezentować posortowane wartości, co będzie listą - prawdopodobnie listą krotek.
Na przykład:
import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))
sorted_x będzie listą krotek posortowanych według drugiego elementu w każdej krotce. dict (sorted_x) == x.
A dla tych, którzy chcą posortować klucze zamiast wartości:
import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(0))
w Pythonie3, ponieważ rozpakowywanie nie jest dozwolone [1], możemy użyć
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=lambda kv: kv[1])
Jeśli chcesz, aby wynik był dyktowany, możesz użyć colections.OrderedDict:
import collections
sorted_dict = collections.OrderedDict(sorted_x)