Jak sortować słownik według wartości?

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)

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.