In diesem Leitfaden werden verschiedene Methoden zur Sortierung eines Python-Wörterbuchs erläutert, sowohl nach Schlüsseln als auch nach Werten.
Bei der Arbeit mit Python-Wörterbüchern kann es notwendig sein, deren Inhalt zu ordnen. Da ein Python-Wörterbuch eine Sammlung von Schlüssel-Wert-Paaren ist, erstellen wir für sortierte Ergebnisse ein neues Wörterbuch, das die gewünschte Sortierung der Schlüssel oder Werte aufweist.
Dieses Tutorial beginnt mit einer kurzen Wiederholung der Grundlagen von Python-Wörterbüchern. Anschließend werden wir uns damit beschäftigen, wie man neue Wörterbücher erzeugt, deren Einträge entweder nach Schlüssel oder Wert sortiert sind.
Auffrischung: Python-Wörterbuch Grundlagen
Was ist ein Python-Wörterbuch?
Ein Wörterbuch ist ein elementarer Datentyp in Python. Es speichert Daten in Form von Schlüssel-Wert-Paaren. Die Schlüssel dienen dazu, die zugehörigen Werte abzurufen. Da Schlüssel die Werte eindeutig identifizieren, dürfen sie nicht mehrfach vorkommen.
py_dict = {"Python":"cool!","Lernen":True} py_dict["Python"] # Ausgabe: cool! py_dict["Lernen"] # Ausgabe: True
In ihrer Funktionalität ähneln Wörterbücher Hash-Maps. Daher sind sie nicht von Natur aus geordnet. Sie können in beliebiger Reihenfolge auf den Inhalt eines Wörterbuchs zugreifen, sofern Sie den jeweiligen Schlüssel kennen.
Reihenfolge der Elemente in einem Wörterbuch
In früheren Python-Versionen war die Verwendung von OrderedDict erforderlich, um die Reihenfolge der Schlüssel beizubehalten. Ab Python 3.7 bleiben die Elemente jedoch in der Reihenfolge erhalten, in der sie dem Wörterbuch hinzugefügt wurden.
Nachdem wir nun die Grundlagen von Python-Wörterbüchern wiederholt haben, werden wir uns ansehen, wie sortierte Kopien eines Wörterbuchs erstellt werden können.
⚙️ Hinweis: Dieses Tutorial erfordert Python 3.7 oder höher. Sie können die neueste Version von Python herunterladen oder die Beispiele im Online Python-Editor ausführen.
Python-Wörterbuch nach Schlüssel sortieren
Betrachten Sie die folgende Dessertkarte eines Cafés. Sie enthält zwei Spalten: die Namen der angebotenen Speisen und die jeweiligen Preise.
Diese Informationen lassen sich in Form eines Python-Wörterbuchs darstellen, wobei die Namen der Speisen als Schlüssel und die Preise als Werte fungieren.
Erstellen wir nun ein solches Wörterbuch für die Desserts.
desserts = { "Eis":10, "Brownies":12, "Käsekuchen":3, "Biskuitrolle":5, "Kekse":4, "Cupcake":2 }
Als Nächstes erstellen wir ein Wörterbuch namens `sortierte_desserts`, in dem die Desserts alphabetisch geordnet sind. Im ursprünglichen `desserts`-Wörterbuch sind die Namen der Desserts die Schlüssel. Um ein neues Wörterbuch zu erstellen, müssen diese Schlüssel also alphabetisch sortiert werden.
Zugriff auf die Schlüssel eines Python-Wörterbuchs
Dazu holen wir uns zunächst die Schlüssel des Wörterbuchs und sortieren sie anschließend alphabetisch.
In Python kann mit der integrierten Methode `.keys()` eine Liste aller Schlüssel des Wörterbuchs abgerufen werden.
Rufen wir die Methode `.keys()` für das `desserts`-Wörterbuch auf:
keys = desserts.keys() print(keys) #Ausgabe ['Eis', 'Brownies', 'Käsekuchen', 'Biskuitrolle', 'Kekse', 'Cupcake']
Die eingebaute Funktion `sorted()` gibt eine neue, sortierte Liste zurück, wenn sie mit einer Liste als Argument aufgerufen wird.
Rufen wir die Funktion `sorted()` mit den Schlüsseln als Argument auf und speichern die sortierte Liste in der Variablen `sortierte_keys`.
sortierte_keys = sorted(keys) print(sortierte_keys) # Ausgabe ['Biskuitrolle', 'Brownies', 'Cupcake', 'Eis', 'Kekse', 'Käsekuchen']
Nachdem wir die Schlüssel alphabetisch sortiert haben, können wir die zugehörigen Werte aus dem `desserts`-Wörterbuch abrufen:
sortierte_desserts = {} for key in sortierte_keys: sortierte_desserts[key] = desserts[key] print(sortierte_desserts) # Ausgabe {'Biskuitrolle': 5, 'Brownies': 12, 'Cupcake': 2, 'Eis': 10, 'Kekse': 4, 'Käsekuchen': 3}
Eine Erläuterung des obigen Codeblocks:
- `sortierte_desserts` wird als leeres Python-Wörterbuch initialisiert.
- Die Schlüsselliste `sortierte_keys` wird durchlaufen.
- Für jeden Schlüssel in `sortierte_keys` wird ein Eintrag in `sortierte_desserts` hinzugefügt, wobei der entsprechende Wert aus dem `desserts`-Wörterbuch abgerufen wird.
Die Verwendung der for-Schleife ist etwas ausführlich. In Python gibt es eine elegantere Möglichkeit, die sogenannte „Dictionary Comprehension“.
Dictionary Comprehension in Python
Python unterstützt die Dictionary Comprehension, ähnlich der Listen Comprehension. Mit Dictionary Comprehension lässt sich in einer Zeile Code ein neues Python-Wörterbuch erstellen.
▶️ Hier ist die allgemeine Syntax zur Verwendung von Dictionary Comprehension in Python.
# 1. Wenn Schlüssel und Werte in zwei Listen vorhanden sind: liste1, liste2 neues_dict = {key:value for key,value in zip(liste1,liste2)} # 2. Wenn die Schlüssel vorhanden sind und die Werte abgerufen werden können neues_dict = {key:value for key in <iterable>}
Wir verwenden die zweite Syntax aus dem obigen Beispiel: `neues_dict = {key:value for key in
In diesem Beispiel:
- iterable: Die Liste `sortierte_keys`
- key: Der Schlüssel, auf den wir durch das Durchlaufen von `sortierte_keys` zugreifen
- value: Der Wert, der dem Schlüssel im `desserts`-Wörterbuch entspricht: `desserts[key]`
Zusammengenommen ergibt dies den folgenden Dictionary-Comprehension-Ausdruck:
sortierte_desserts = {key:desserts[key] for key in sortierte_keys} print(sortierte_desserts) {'Biskuitrolle': 5, 'Brownies': 12, 'Cupcake': 2, 'Eis': 10, 'Kekse': 4, 'Käsekuchen': 3}
Wie die Ausgabe zeigt, sind die Desserts in dem Wörterbuch `sortierte_desserts` alphabetisch sortiert.
Python-Wörterbuch nach Wert sortieren
Als Nächstes werden wir uns ansehen, wie ein Python-Wörterbuch nach seinen Werten sortiert werden kann.
Im `desserts`-Wörterbuch entsprechen die Werte den Preisen der Desserts. Das Wörterbuch kann nun nach Preisen sortiert werden, entweder aufsteigend oder absteigend.
▶️ Mit der integrierten Methode `.items()` des Wörterbuchs können alle Schlüssel-Wert-Paare abgerufen werden. Jedes Tupel repräsentiert ein Schlüssel-Wert-Paar.
desserts.items() dict_items([('Eis', 10), ('Brownies', 12), ('Käsekuchen', 3), ('Biskuitrolle', 5), ('Kekse', 4), ('Cupcake', 2)])
Jedes Element ist ein Tupel. Sie können auf die einzelnen Schlüssel und Werte zugreifen, indem Sie das jeweilige Schlüssel-Wert-Paar indizieren.
dict_items = desserts.items() for item in dict_items: print(f"Schlüssel:{item[0]},Wert:{item[1]}") # Ausgabe Schlüssel:Eis,Wert:10 Schlüssel:Brownies,Wert:12 Schlüssel:Käsekuchen,Wert:3 Schlüssel:Biskuitrolle,Wert:5 Schlüssel:Kekse,Wert:4 Schlüssel:Cupcake,Wert:2
Da wir nach Werten sortieren wollen, greifen wir wie oben gezeigt auf den Wert im Schlüssel-Wert-Paar über den Index 1 zu.
Werte eines Python-Wörterbuchs aufsteigend sortieren
Wir verwenden die Funktion `sorted()` zusammen mit dem optionalen Parameter `key`. `key` kann eine beliebige Python-Funktion, eine integrierte Funktion, eine benutzerdefinierte Funktion oder auch eine Lambda-Funktion sein.
Hinweis: Die Syntax zum Definieren von Lambda-Funktionen in Python lautet `lambda args: expression`.
In unserem Beispiel zum Sortieren der Desserts nach Preis greifen wir auf die Wörterbuchelemente (Schlüssel-Wert-Paare) zu. Wir setzen `key = lambda item:item[1]`, da wir nach dem Wert (Preis) sortieren wollen.
Da die Funktion `sorted()` standardmäßig eine Liste zurückgibt, wandeln wir diese explizit in ein Dictionary um.
sortierte_desserts = dict(sorted(desserts.items(), key=lambda item:item[1])) print(sortierte_desserts) {'Cupcake': 2, 'Käsekuchen': 3, 'Kekse': 4, 'Biskuitrolle': 5, 'Eis': 10, 'Brownies': 12}
Alternativ können wir den Code wie zuvor mit Dictionary Comprehension schreiben.
sortierte_desserts = {key:value for key, value in sorted(desserts.items(), key=lambda item:item[1])} print(sortierte_desserts) # Ausgabe {'Cupcake': 2, 'Käsekuchen': 3, 'Kekse': 4, 'Biskuitrolle': 5, 'Eis': 10, 'Brownies': 12}
In `sortierte_desserts` ist der Cupcake zum Preis von 2 € der erste Artikel und die Brownies zum Preis von 12 € der letzte Artikel.
Werte eines Python-Wörterbuchs absteigend sortieren
Um die Preise in absteigender Reihenfolge zu sortieren, setzen wir den optionalen Parameter `reverse` auf `True`:
sortierte_desserts = dict(sorted(desserts.items(), key=lambda item:item[1], reverse=True)) print(sortierte_desserts) # Ausgabe {'Brownies': 12, 'Eis': 10, 'Biskuitrolle': 5, 'Kekse': 4, 'Käsekuchen': 3, 'Cupcake': 2}
Nun sind die `sortierte_desserts` nach absteigenden Preisen sortiert, beginnend mit den teuersten Brownies zum Preis von 12 €.
Fazit 👩🏽💻
Fassen wir kurz zusammen, was wir in diesem Tutorial gelernt haben:
- Ein Python-Wörterbuch speichert Daten als Schlüssel-Wert-Paare; die Schlüssel müssen eindeutig sein.
- Beim Sortieren eines Wörterbuchs nach Schlüssel oder Wert wird ein neues Wörterbuch erstellt, das entsprechend sortiert ist.
- Mit den integrierten Methoden `.keys()` und `.items()` lassen sich alle Schlüssel bzw. alle Schlüssel-Wert-Paare abrufen.
- Die Funktion `sorted()` kann mit den optionalen Parametern `key` und `reverse` verwendet werden, um die gewünschte Sortierung zu erzielen.
Nachdem Sie gelernt haben, wie man ein Python-Wörterbuch sortiert, können Sie sich dem Sortieren von Python-Listen zuwenden. Viel Spaß beim Programmieren!🎉