Vergleich von keys()
und sorted()
Im vorherigen Schritt haben Sie gelernt, wie Sie die sorted()
-Funktion in Kombination mit der keys()
-Methode verwenden können, um in sortierter Reihenfolge durch ein Wörterbuch (dictionary) zu iterieren. In diesem Schritt werden wir die Unterschiede zwischen der direkten Verwendung von keys()
und der Verwendung von sorted()
mit keys()
genauer untersuchen. Das Verständnis dieser Unterschiede ist entscheidend für das Schreiben von effizientem und lesbarem Python-Code.
Die keys()
-Methode gibt ein Ansichtsobjekt (view object) zurück, das eine dynamische Ansicht der Schlüssel (keys) des Wörterbuchs darstellt. Dies bedeutet, dass sich das Ansichtsobjekt an alle Änderungen im Wörterbuch anpasst. Das Ansichtsobjekt selbst ist jedoch keine Liste und unterstützt keine direkte Sortierung.
Andererseits gibt die sorted()
-Funktion eine neue Liste zurück, die alle Elemente des Iterierbaren in aufsteigender Reihenfolge enthält. Wenn Sie sorted(my_dict.keys())
verwenden, erstellen Sie eine neue sortierte Liste der Schlüssel des Wörterbuchs, wobei das ursprüngliche Wörterbuch und sein Ansichtsobjekt unverändert bleiben.
Illustrieren wir dies anhand eines Beispiels. Öffnen Sie die Datei sort_keys.py
in Ihrem ~/project
-Verzeichnis mit dem VS Code-Editor und ändern Sie sie wie folgt:
## Create a dictionary
my_dict = {"b": 2, "a": 1, "c": 3}
## Get the keys view object
keys_view = my_dict.keys()
## Print the keys view object
print("Keys view object:", keys_view)
## Print the sorted keys
sorted_keys = sorted(my_dict.keys())
print("Sorted keys:", sorted_keys)
## Modify the dictionary
my_dict["d"] = 4
## Print the keys view object again
print("Keys view object after modification:", keys_view)
## Iterate through the dictionary using the sorted keys
for key in sorted_keys:
print(f"Key: {key}, Value: {my_dict[key]}")
In diesem Code:
- Wir erstellen ein Wörterbuch namens
my_dict
.
- Wir erhalten das Ansichtsobjekt der Schlüssel mit
my_dict.keys()
und speichern es in der Variable keys_view
.
- Wir geben das
keys_view
-Objekt und die sorted_keys
-Liste aus.
- Wir ändern dann das Wörterbuch, indem wir ein neues Schlüssel-Wert-Paar hinzufügen.
- Wir geben das
keys_view
-Objekt erneut aus, um zu zeigen, dass es die Änderungen im Wörterbuch widerspiegelt.
- Schließlich iterieren wir durch die
sorted_keys
-Liste und geben die Schlüssel-Wert-Paare aus. Beachten Sie, dass die sorted_keys
-Liste unverändert bleibt und die Hinzufügung des Schlüssels "d"
nicht widerspiegelt.
Führen Sie nun das Skript mit dem folgenden Befehl aus:
python sort_keys.py
Sie sollten die folgende Ausgabe sehen:
Keys view object: dict_keys(['b', 'a', 'c'])
Sorted keys: ['a', 'b', 'c']
Keys view object after modification: dict_keys(['b', 'a', 'c', 'd'])
Key: a, Value: 1
Key: b, Value: 2
Key: c, Value: 3
Beachten Sie, dass:
- Das
keys_view
-Objekt eine dynamische Ansicht der Schlüssel des Wörterbuchs ist. Wenn wir das Wörterbuch ändern, spiegelt das keys_view
-Objekt diese Änderungen wider.
- Die
sorted_keys
-Liste ist eine statische Liste, die die Schlüssel zum Zeitpunkt ihrer Erstellung enthält. Sie spiegelt die späteren Änderungen am Wörterbuch nicht wider.
- Die Schleife iteriert nur durch die Schlüssel, die vorhanden waren, als
sorted_keys
erstellt wurde.
Dieses Beispiel verdeutlicht den wesentlichen Unterschied zwischen keys()
und sorted()
. keys()
bietet eine dynamische Ansicht, während sorted()
eine statische sortierte Liste erstellt. Wählen Sie die geeignete Methode je nachdem, ob Sie die Änderungen im Wörterbuch widerspiegeln oder mit einer festen Menge sortierter Schlüssel arbeiten müssen.