7.1 Erstellen von verschachtelten Wörterbüchern
Verschachtelte Wörterbücher sind eine sehr praktische Methode, um komplexe Datenstrukturen zu beschreiben, mit denen du sehr oft konfrontiert wirst. Lass uns ein wenig damit üben, sie zu erstellen.
Erstellen von verschachtelten Wörterbüchern
Hier ist ein Beispiel, wie man ein verschachteltes Wörterbuch erstellt:
person = {
"name": "Alice",
"details": {
"age": 25,
"city": "New York",
"address": {
"street": "123 Main St",
"zip": "10001"
},
"mother": "Jane Smith"
},
"gender": "female"
}
print(person) # Ausgabe: {'name': 'Alice', 'details': {'age': 25, 'city': 'New York', 'address': {'street': '123 Main St', 'zip': '10001'}, 'mother': 'Jane Smith'}, 'gender': 'female'}
In diesem Beispiel ist person ein Wörterbuch, das ein verschachteltes Wörterbuch details enthält, welches wiederum ein weiteres verschachteltes Wörterbuch address enthält.
Ein verschachteltes Wörterbuch kann auch aus einzelnen Teilen erstellt werden:
address = {
"street": "123 Main St",
"zip": "10001"
}
details = {
"age": 25,
"city": "New York",
"address": address
}
person = {
"name": "Alice",
"details": details,
"gender": "female"
}
print(person) # Ausgabe: {'name': 'Alice', 'details': {'age': 25, 'city': 'New York', 'address': {'street': '123 Main St', 'zip': '10001'}}, 'gender': 'female'}
7.2 Zugriff auf Elemente eines verschachtelten Wörterbuchs
Der Zugriff auf Elemente verschachtelter Wörterbücher ist einfach und intuitiv. So wird es gemacht:
Zugriff auf Elemente der obersten Ebene
name = person["name"]
print(name) # Ausgabe: Alice
Zugriff auf Elemente eines verschachtelten Wörterbuchs
age = person["details"]["age"]
city = person["details"]["city"]
print(age) # Ausgabe: 25
print(city) # Ausgabe: New York
Zugriff auf tiefer verschachtelte Elemente
street = person["details"]["address"]["street"]
zip_code = person["details"]["address"]["zip"]
print(street) # Ausgabe: 123 Main St
print(zip_code) # Ausgabe: 10001
7.3 Ändern von Elementen eines verschachtelten Wörterbuchs
Wenn du bereits verstanden hast, wie man Elemente jeder Verschachtelungsebene ausgibt, wird deren Veränderung noch einfacher:
Ändern von Werten der obersten Ebene
person["name"] = "Bob"
print(person["name"]) # Ausgabe: Bob
Ändern von Werten eines verschachtelten Wörterbuchs
person["details"]["age"] = 26
print(person["details"]["age"]) # Ausgabe: 26
Ändern von tiefer verschachtelten Werten
person["details"]["address"]["city"] = "Los Angeles"
print(person["details"]["address"]["city"]) # Ausgabe: Los Angeles
Hinzufügen neuer Elemente in ein verschachteltes Wörterbuch
person["details"]["phone"] = "123-456-7890"
print(person["details"]["phone"]) # Ausgabe: 123-456-7890
Entfernen von Elementen der obersten Ebene
# Entferne das Element 'country' aus dem Wörterbuch 'person'
del person["country"]
print(person) # Das Element 'country' wird aus dem Wörterbuch entfernt
Entfernen von Elementen aus einem verschachtelten Wörterbuch
# Entferne das Element 'phone' aus dem Wörterbuch 'details'
del person["details"]["phone"]
print(person["details"]) # Das Element 'phone' wird aus dem Wörterbuch 'details' entfernt
7.4 Durchlaufen von verschachtelten Wörterbüchern
Es gibt mehrere Möglichkeiten, alle Elemente eines Wörterbuchs zu durchlaufen. Schleifen sind die einfachste davon:
Iteration über Elemente eines verschachtelten Wörterbuchs
for key, value in person.items(): # Durchlaufe das übergeordnete Wörterbuch
if isinstance(value, dict): # Wenn der Wert ein Wörterbuch ist
for key2, value2 in value.items(): # Durchlaufe die Elemente des untergeordneten Wörterbuchs
print(f"{key} --> {key2}: {value2}")
Rekursive Iteration über alle Verschachtelungsebenen
def print_dict(d, indent=0):
for key, value in d.items():
print(" " * indent + str(key) + ": ", end="")
if isinstance(value, dict):
print()
print_dict(value, indent + 1)
else:
print(value)
print_dict(person)
Mehr über Rekursion lernst du im Abschnitt „Algorithmen und Datenstrukturen“.
Übrigens ist Rekursion praktisch, um einen Wert tief in verschachtelten Wörterbüchern zu finden. Hier ein Beispiel:
def find_key(d, key):
if key in d:
return d[key]
for k, v in d.items():
if isinstance(v, dict):
result = find_key(v, key)
if result:
return result
return None
phone = find_key(person, "phone")
print(phone) # Ausgabe: None (weil das Element 'phone' entfernt wurde)
GO TO FULL VERSION