So sortieren Sie ein Wörterbuch nach Wert in Python

Einleitung

Ein Wörterbuch in Python ist eine Sammlung von Elementen, die Daten als Schlüssel-Wert-Paare speichern. In Python 3.7 und späteren Versionen werden Wörterbücher nach der Reihenfolge des Einfügens von Elementen sortiert. In früheren Versionen waren sie ungeordnet.

In diesem Artikel sehen wir uns an, wie wir ein Wörterbuch nach den darin enthaltenen Werten sortieren können.

Wörterbuch sortieren mit a für Loop

Wir können ein Wörterbuch mit Hilfe von a sortieren for Schleife. Zuerst verwenden wir die sorted() Funktion, um die Werte des Wörterbuchs zu ordnen. Wir durchlaufen dann die sortierten Werte und finden die Schlüssel für jeden Wert. Wir fügen diese Schlüssel-Wert-Paare in der sortierten Reihenfolge in ein neues Wörterbuch ein.

Hinweis: Durch Sortieren können Sie das vorhandene Wörterbuch nicht neu anordnen. Wir schreiben die geordneten Paare in ein völlig neues, leeres Wörterbuch.

dict1 = {1: 1, 2: 9, 3: 4}
sorted_values = sorted(dict1.values()) 
sorted_dict = {}

for i in sorted_values:
    for k in dict1.keys():
        if dict1[k] == i:
            sorted_dict[k] = dict1[k]

print(sorted_dict)

Wenn Sie dies mit dem Python-Interpreter ausführen, sehen Sie Folgendes:

{1: 1, 3: 4, 2: 9}

Nachdem wir nun gesehen haben, wie man mit Schleifen sortiert, schauen wir uns eine beliebtere Alternative an, die die verwendet sorted() Funktion.

Wörterbuch sortieren mit sortiert () Funktion

Wir haben früher die verwendet sorted() Funktion zum Sortieren der Werte eines Arrays. Beim Sortieren eines Wörterbuchs können wir ein weiteres Argument an die übergeben sorted() Funktion wie folgt: sorted(dict1, key=dict1.get).

Hier key ist eine Funktion, die für jedes Element aufgerufen wird, bevor die Werte zum Sortieren verglichen werden. Das get() -Methode für Wörterbuchobjekte gibt den Wert des Schlüssels eines Wörterbuchs zurück.

Das sorted(dict1, key=dict1.get) Ausdruck gibt die Liste der Schlüssel zurück, deren Werte der Reihe nach sortiert sind. Von dort aus können wir ein neues, sortiertes Wörterbuch erstellen:

dict1 = {1: 1, 2: 9, 3: 4}
sorted_dict = {}
sorted_keys = sorted(dict1, key=dict1.get)  

for w in sorted_keys:
    sorted_dict[w] = dict1[w]

print(sorted_dict) 

Verwendung der sorted() -Funktion hat die Menge an Code reduziert, die wir bei der Verwendung schreiben mussten for Schleifen. Wir können die jedoch weiter kombinieren sorted() funktion mit dem itemgetter() Funktion für eine prägnantere Lösung zum Sortieren von Wörterbüchern nach Werten.

Wörterbuch sortieren mit Operator Modul u Itemgetter()

Das operator Modul enthält die itemgetter() Funktion. Diese Funktion gibt ein aufrufbares Objekt zurück, das ein Element von einem Objekt zurückgibt.

Verwenden wir zum Beispiel itemgetter() um ein aufrufbares Objekt zu erstellen, das den Wert eines beliebigen Wörterbuchs mit einem Schlüssel zurückgibt, der ist 2:

import operator

dict1 = {1: 1, 2: 9}
get_item_with_key_2 = operator.itemgetter(2)

print(get_item_with_key_2(dict1))  

Jedes Wörterbuch hat Zugriff auf die items() Methode. Diese Funktion gibt die Schlüssel-Wert-Paare eines Wörterbuchs als Liste von Tupeln zurück. Wir können die Liste der Tupel sortieren, indem wir die verwenden itemgetter() Funktion, um den zweiten Wert des Tupels zu ziehen, dh den Wert der Schlüssel im Wörterbuch.

Sobald es sortiert ist, können wir ein Wörterbuch basierend auf diesen Werten erstellen:

import operator

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)  
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict) 

Mit viel weniger Aufwand haben wir ein nach Werten sortiertes Wörterbuch!

Da die key Argument jede Funktion akzeptiert, können wir Lambda-Funktionen verwenden, um Wörterbuchwerte zurückzugeben, damit sie sortiert werden können. Mal sehen wie.

Wörterbuch mithilfe einer Lambda-Funktion sortieren

Lambda-Funktionen sind anonyme oder namenlose Funktionen in Python. Wir können Lambda-Funktionen verwenden, um den Wert eines Wörterbuchelements abzurufen, ohne die importieren zu müssen operator Modul für itemgetter(). Wenn Sie mehr über Lambdas erfahren möchten, können Sie in unserem Leitfaden nachlesen Lambda-Funktionen in Python.

Sehen Sie sich unseren praxisnahen, praktischen Leitfaden zum Erlernen von Git an, mit Best Practices, branchenweit akzeptierten Standards und einem mitgelieferten Spickzettel. Hören Sie auf, Git-Befehle zu googeln und tatsächlich in Verbindung, um es!

Lassen Sie uns ein Wörterbuch mithilfe einer Lambda-Funktion in der nach Werten sortieren key Argument oder sorted():

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=lambda item: item[1])
print(sorted_tuples)  
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict)  

Beachten Sie, dass die bisher besprochenen Methoden nur mit Python 3.7 und höher funktionieren. Mal sehen, was wir für frühere Versionen von Python tun können.

Zurückgeben eines neuen Wörterbuchs mit sortierten Werten

Um nach dem Sortieren eines Wörterbuchs nach Werten ein sortiertes Wörterbuch in Python-Versionen vor 3.7 zu behalten, müssen Sie die verwenden OrderedDict – erhältlich im collections Modul. Diese Objekte sind Wörterbücher, die die Reihenfolge des Einfügens beibehalten.

Hier ist ein Beispiel für das Sortieren und Verwenden OrderedDict:

import operator
from collections import OrderedDict

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)  

sorted_dict = OrderedDict()
for k, v in sorted_tuples:
    sorted_dict[k] = v

print(sorted_dict)  

Zusammenfassung

Dieses Tutorial hat gezeigt, wie ein Wörterbuch basierend auf seinen Werten sortiert werden kann. Zuerst haben wir ein Wörterbuch mit zwei for-Schleifen sortiert. Wir haben dann unsere Sortierung verbessert, indem wir die verwendet haben sorted() Funktion. Wir haben auch die gesehen itemgetter() Funktion von der operator Modul kann unsere Lösung prägnanter machen.

Schließlich haben wir unsere Lösung so angepasst, dass sie mit Python-Versionen unter 3.7 funktioniert.

Variationen der sorted() Funktion sind die beliebtesten und zuverlässigsten, um ein Wörterbuch nach Werten zu sortieren.

Zeitstempel:

Mehr von Stapelmissbrauch