6.1 Verwendung von enumerate()
Wir haben bereits die Arbeit mit Schleifen über keys, values und items in Dictionaries betrachtet. Lassen uns jetzt die Funktion enumerate() genauer anschauen.
Die Funktion enumerate() ist nützlich, um Elemente eines Dictionaries zu durchlaufen und dabei sowohl Zugriff auf Indizes als auch auf Schlüssel und Werte zu haben.
Hier sind einige Beispiele für die Verwendung von enumerate() mit Dictionaries:
Iteration über Schlüssel und Werte des Dictionaries mit Indizes
Du kannst enumerate() verwenden, um über Schlüssel und Werte eines Dictionaries zu iterieren und dabei die Indizes zu erhalten.
# Dictionary mit Daten über eine Person
person = {"name": "Alice", "age": 25, "city": "New York"}
# Iteration über Schlüssel und Werte des Dictionaries mit Indizes
for index, (key, value) in enumerate(person.items()):
print(f"Index: {index}, Schlüssel: {key}, Wert: {value}")
# Gibt den Index, den Schlüssel und den Wert jedes Elements des Dictionaries aus
Ausgabe:
Index: 0, Schlüssel: name, Wert: Alice
Index: 1, Schlüssel: age, Wert: 25
Index: 2, Schlüssel: city, Wert: New York
Transformation von Dictionary-Werten mit Indizes
Du kannst enumerate() verwenden, um die Werte eines Dictionaries in Abhängigkeit von deren Index zu ändern.
# Ursprüngliches Dictionary
person = {"name": "Alice", "age": 25, "city": "New York"}
# Neues Dictionary mit Indizes in den Werten
indexed_person = {}
for index, (key, value) in enumerate(person.items()):
indexed_person[key] = f"{value}_{index}"
# Weist dem Wert im Dictionary den Index als String zu
print(indexed_person)
# Gibt das Dictionary mit Indizes aus, die zu den Werten hinzugefügt wurden
Ausgabe:
{'name': 'Alice_0', 'age': '25_1', 'city': 'New York_2'}
Verwendung von enumerate() zur Erstellung eines neuen Dictionaries
Du kannst enumerate() verwenden, um ein neues Dictionary zu erstellen, bei dem die Indizes als Schlüssel verwendet werden.
# Ursprüngliches Dictionary
person = {"name": "Alice", "age": 25, "city": "New York"}
# Neues Dictionary, bei dem Indizes als Schlüssel verwendet werden
indexed_person = {index: (key, value) for index, (key, value) in enumerate(person.items())}
print(indexed_person)
# Gibt das neue Dictionary mit Indizes als Schlüssel aus
Ausgabe:
{0: ('name', 'Alice'), 1: ('age', 25), 2: ('city', 'New York')}
6.2 Wörterbuch-Generatoren
Wir haben bereits List Comprehensions zur Erstellung von Listen und Set Comprehensions zur Erstellung von Sets verwendet. Ähnlich kann der Generator-Syntax verwendet werden, um Dictionaries zu erstellen. Dictionary Comprehensions (Wörterbuch-Generatoren) ermöglichen es, kürzeren und lesbareren Code zur Erstellung von Dictionaries zu schreiben.
Die grundlegende Syntax des dictionary comprehension sieht wie folgt aus:
{Ausdruck1: Ausdruck2 for variable in Sequenz if Bedingung}
wo
-
variable— die Variable, die den Wert jedes Elements des iterierbaren Objekts annimmt. -
Sequenz— ein iterierbares Objekt (z.B. Liste, Tuple, String), das durch diese Variable durchlaufen wird. -
Ausdruck1— Ausdruck zur Generierung von Dictionary-Schlüsseln. Normalerweise abhängig von der Variable. -
Ausdruck2— Ausdruck zur Generierung von Dictionary-Werten. -
Bedingung— (optional) Bedingung, die erfüllt sein muss, um ein Element in das Dictionary aufzunehmen.
Beispiel 1:
Erstellung eines Dictionaries mit Quadraten der Zahlen
# Erstellung eines Dictionaries, bei dem die Schlüssel Zahlen von 1 bis 5 und die Werte deren Quadrate sind
squares = {x: x ** 2 for x in range(1, 6)}
print(squares) # Ausgabe: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Beispiel 2:
Erstellung eines Dictionaries aus einer Liste von Tupeln
# Liste von Tupeln mit Schlüssel-Wert-Paaren
pairs = [("name", "Alice"), ("age", 25), ("city", "New York")]
# Generierung eines Dictionaries aus der Liste von Tupeln
person = {key: value for key, value in pairs}
print(person) # Ausgabe: {'name': 'Alice', 'age': 25, 'city': 'New York'}
Beispiel 3:
Filtern von Elementen bei der Erstellung eines Dictionaries
# Erstellung eines Dictionaries, bei dem die Schlüssel Zahlen von 1 bis 10 und die Werte deren Quadrate sind
# Nur für gerade Zahlen
even_squares = {x: x ** 2 for x in range(1, 11) if x % 2 == 0}
print(even_squares) # Ausgabe: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
Beispiel 4:
Transformation von Elementen bei der Erstellung eines Dictionaries
# Liste von Strings
words = ["apple", "banana", "cherry"]
# Generierung eines Dictionaries, bei dem die Schlüssel Strings und die Werte deren Längen sind
word_lengths = {word: len(word) for word in words}
print(word_lengths) # Ausgabe: {'apple': 5, 'banana': 6, 'cherry': 6}
Verschachtelte dictionary comprehensions
# Liste von Listen mit Schlüssel-Wert-Paaren
nested_pairs = [[("a", 1), ("b", 2)], [("c", 3), ("d", 4)]]
# Generierung eines Dictionaries aus der verschachtelten Liste
nested_dict = {key: value for sublist in nested_pairs for key, value in sublist}
print(nested_dict) # Ausgabe: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
Kombinierte Methoden
Man kann verschiedene Methoden zur Erstellung von Dictionaries kombinieren, um komplexere Fälle zu behandeln.
# Kombination mehrerer Dictionaries in einem
dict1 = {"name": "John", "age": 30}
dict2 = {"city": "New York", "country": "USA"}
combined_dict = {**dict1, **dict2}
print(combined_dict) # Ausgabe: {'name': 'John', 'age': 30, 'city': 'New York', 'country': 'USA'}
Die Verwendung des Operators ** vor dem Namen des Dictionaries erlaubt es, dessen Elemente zu entpacken, als wären sie in einer Reihe aufgelistet. So kombiniert der Ausdruck {**dict1, **dict2} praktisch die Elemente beider Dictionaries.
GO TO FULL VERSION