Python 3.7+ oder CPython 3.6
Dicts behalten die Einfügereihenfolge in Python 3.7+ bei. Dasselbe in CPython 3.6, aber es ist ein Detail der Implementierung .
>>> x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
>>> {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}
oder
>>> dict(sorted(x.items(), key=lambda item: item[1]))
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}
Ältere Python
Es ist nicht möglich, ein Wörterbuch zu sortieren, sondern nur eine Darstellung eines sortierten Wörterbuchs zu erhalten. Wörterbücher sind von Natur aus ungeordnet, aber andere Typen wie Listen und Tupel sind es nicht. Sie brauchen also einen geordneten Datentyp, um sortierte Werte darzustellen, und das ist eine Liste - wahrscheinlich eine Liste von Tupeln.
Zum Beispiel,
import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))
sorted_x
ist eine Liste von Tupeln, sortiert nach dem zweiten Element in jedem Tupel. dict(sorted_x) == x
.
Und für diejenigen, die nach Schlüsseln statt nach Werten sortieren wollen:
import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(0))
In Python3 seit Auspacken ist nicht erlaubt können wir
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=lambda kv: kv[1])
Wenn Sie die Ausgabe in Form eines Diktats wünschen, können Sie collections.OrderedDict
:
import collections
sorted_dict = collections.OrderedDict(sorted_x)