Dictionaries und andere Sammlungen · Übung
Schlüssel prüfen und get() verwenden
Der Zugriff mit eckigen Klammern ist direkt und klar, wenn ein Schlüssel erforderlich ist:
title = book["title"]
Fehlt der Schlüssel, löst Python einen KeyError aus. Manchmal ist das nützlich, weil tatsächlich ein Pflichtfeld fehlt. Optionale Informationen brauchen einen anderen Plan.
Zuerst die Zugehörigkeit prüfen
Der Operator in prüft die Schlüssel eines Dictionarys:
book = {
"title": "Kindred",
"year": 1979,
}
if "creator" in book:
print(book["creator"])
else:
print("Creator missing")
in prüft Schlüssel, keine Werte. Dieser Ausdruck:
"Kindred" in book
ist False, weil "Kindred" ein Wert ist, kein Schlüssel.
Verwende not in für die umgekehrte Prüfung:
if "creator" not in book:
print("Creator missing")
Mit get() nachfragen
Auch die Dictionary-Methode .get() liest einen Wert:
format_name = book.get("format")
Wenn der Schlüssel fehlt, gibt .get() den Wert None zurück, statt einen KeyError auszulösen.
Übergib ein zweites Argument, um einen nützlicheren Ersatzwert zu wählen:
format_name = book.get("format", "unknown")
print(format_name)
# unknown
Das Dictionary wird nicht verändert. .get() wählt nur den Wert aus, den der Aufruf zurückgibt.
Erforderlich oder optional?
Entscheide nach der Bedeutung des Datensatzes:
Verwende
book["title"], wenn jeder gültige Buchdatensatz einen Titel haben muss.Verwende
book.get("format", "unknown"), wenn das Format optional ist und der aufrufende Code einen sinnvollen Ersatzwert hat.Verwende
"creator" in book, wenn das Programm je nach Vorhandensein des Feldes eine andere Aktion ausführen muss.
Ersetze nicht jeden Zugriff mit eckigen Klammern durch .get(). Einen fehlenden Pflichtschlüssel stillschweigend zu akzeptieren kann fehlerhafte Daten verbergen. Sicheres Nachschlagen bedeutet, eine bewusste Wahl zu treffen.
Was gibt dieses Programm aus?
item = {"name": "Compass", "price": 12}
print(item.get("color", "not listed"))
print(len(item))
Aufgabe
Lies erforderliche und optionale Informationen aus record.
Lies den erforderlichen
"title"mit einem Zugriff über eckige Klammern und speichere ihn intitle.Verwende
.get(), um"format"mit dem Ersatzwert"unknown"zu lesen, und speichere das Ergebnis informat_name.Verwende
not in, umCreator missingauszugeben, wenn"creator"fehlt.Behalte die beiden abschließenden Ausgabezeilen bei.
Erwartete Ausgabe:
Creator missing
Title: Kindred
Format: unknown