Dictionaries en andere verzamelingen · oefening
Controleer sleutels en gebruik get()
Opzoeken met haken is direct en duidelijk wanneer een sleutel verplicht is:
title = book["title"]
Als de sleutel ontbreekt, veroorzaakt Python een KeyError. Soms is dat nuttig, omdat er echt een verplicht veld ontbreekt. Voor optionele informatie heb je een ander plan nodig.
Controleer eerst of de sleutel aanwezig is
De operator in controleert de sleutels van een dictionary:
book = {
"title": "Kindred",
"year": 1979,
}
if "creator" in book:
print(book["creator"])
else:
print("Creator missing")
in controleert sleutels, geen waarden. Deze expressie:
"Kindred" in book
is False, omdat "Kindred" een waarde is en geen sleutel.
Gebruik not in voor de omgekeerde controle:
if "creator" not in book:
print("Creator missing")
Vraag een waarde op met get()
De dictionarymethode .get() leest ook een waarde:
format_name = book.get("format")
Als de sleutel ontbreekt, geeft .get() de waarde None terug in plaats van een KeyError te veroorzaken.
Geef een tweede argument mee om een nuttigere standaardwaarde te kiezen:
format_name = book.get("format", "unknown")
print(format_name)
# unknown
De dictionary verandert niet. .get() kiest alleen welke waarde de aanroep teruggeeft.
Verplicht of optioneel?
Kies op basis van de betekenis van het record:
Gebruik
book["title"]als elk geldig boekrecord een titel moet hebben.Gebruik
book.get("format", "unknown")als het formaat optioneel is en de aanroeper een zinvolle standaardwaarde heeft.Gebruik
"creator" in bookals het programma een andere actie moet uitvoeren afhankelijk van de aanwezigheid van het veld.
Vervang niet elke zoekopdracht met haken door .get(). Een ontbrekende verplichte sleutel stilzwijgend accepteren kan slechte gegevens verbergen. Veilig opzoeken betekent bewust kiezen.
Wat drukt dit programma af?
item = {"name": "Compass", "price": 12}
print(item.get("color", "not listed"))
print(len(item))
Opdracht
Lees verplichte en optionele informatie uit record.
Lees de verplichte
"title"met haken en sla de waarde op intitle.Gebruik
.get()om"format"te lezen met de standaardwaarde"unknown"en sla het resultaat op informat_name.Gebruik
not inomCreator missingaf te drukken wanneer"creator"ontbreekt.Behoud de laatste twee rapportregels.
Verwachte uitvoer:
Creator missing
Title: Kindred
Format: unknown