11a Dictionaries
Een lijst slaat waardes op een positie op (0, 1, 2, ...). Wil je een waarde opzoeken met een naam, zoals in een telefoonboek waar je een naam opzoekt en een nummer vindt, dan gebruik je een dictionary.
Een dictionary maken
Tussen accolades, met sleutel-waarde-paren gescheiden door komma's:
leerling = {
"naam": "Sara",
"leeftijd": 15,
"klas": "3B"
}
print(leerling["naam"]) # Sara
print(leerling["leeftijd"]) # 15
- De sleutel staat links van de dubbele punt (
"naam"). - De waarde staat rechts (
"Sara"). - Met
dictionary[sleutel]haal je de waarde op.
Opzoeken met een naam leest makkelijker dan met een nummer: bij leerling["naam"] zie je meteen wat je krijgt.
leerling = {"naam": "Sara", "leeftijd": 15}
print(leerling[0])
Toevoegen en wijzigen
Een waarde aanpassen of een nieuwe sleutel toevoegen werkt hetzelfde:
leerling["leeftijd"] = 16 # wijzigt bestaande sleutel
leerling["hobby"] = "muziek" # voegt nieuwe sleutel toe
Bestaat de sleutel al, dan wordt de waarde overschreven. Bestaat hij nog niet, dan wordt hij toegevoegd.
Er gaat iets mis
Een sleutel die niet bestaat
leerling = {"naam": "Sara"}
print(leerling["leeftijd"])
Uitvoer:
KeyError: 'leeftijd'
De melding noemt de sleutel die Python zocht. Controleer de spelling, of voeg de sleutel eerst toe. Hoe je vooraf kijkt of een sleutel bestaat, leer je in de volgende les.
De aanhalingstekens om de sleutel vergeten
leerling = {"naam": "Sara"}
print(leerling[naam])
Uitvoer:
NameError: name 'naam' is not defined
Zonder aanhalingstekens zoekt Python een variabele naam, en die is er niet. De sleutel is de tekst "naam": leerling["naam"].
Speel dit eerst na zonder computer, met enveloppen als kluisjes: Kluisjes met naamkaartjes. Je docent kan de hand-out printen.
Opdracht 11a.1: Profiel maken
Maak een dictionary profiel met drie sleutels: "naam", "leeftijd" en "stad". Print alleen de naam.
# Schrijf hier je code
Klik hier voor een tip.
profiel["naam"] geeft de waarde van de sleutel "naam".
Klik hier voor de oplossing.
profiel = {
"naam": "Alex",
"leeftijd": 15,
"stad": "Amsterdam"
}
print(profiel["naam"])
profiel = {
"naam": "Alex",
"leeftijd": 15,
"stad": "Amsterdam"
}
print(profiel["naam"])Opdracht 11a.2: Favoriete film
Maak een dictionary voor je favoriete film met de sleutels "titel", "jaar" en "score". Print elke waarde apart met een f-string.
Verwachte uitvoer (voorbeeld):
Titel: The Matrix
Jaar: 1999
Score: 9.0
# Schrijf hier je code
Klik hier voor een tip.
In een f-string gebruik je {film['titel']}. Let op het verschil tussen de enkele aanhalingstekens binnen de f-string en de dubbele aanhalingstekens van de sleutel in de dictionary zelf.
Klik hier voor de oplossing.
film = {
"titel": "The Matrix",
"jaar": 1999,
"score": 9.0
}
print(f"Titel: {film['titel']}")
print(f"Jaar: {film['jaar']}")
print(f"Score: {film['score']}")
film = {
"titel": "The Matrix",
"jaar": 1999,
"score": 9.0
}
print(f"Titel: {film['titel']}")
print(f"Jaar: {film['jaar']}")
print(f"Score: {film['score']}")Opdracht 11a.3: Klasprofiel
Maak drie dictionaries voor drie leerlingen (elk met "naam" en "klas"). Stop ze in een lijst en print voor elk een nette regel.
Verwachte uitvoer:
Sara zit in klas 3B
Alex zit in klas 3A
Maria zit in klas 4C
# Schrijf hier je code
Klik hier voor een tip.
In de loop is leerling elke ronde een dictionary. Gebruik leerling['naam'] en leerling['klas'] in een f-string.
Klik hier voor de oplossing.
leerling1 = {"naam": "Sara", "klas": "3B"}
leerling2 = {"naam": "Alex", "klas": "3A"}
leerling3 = {"naam": "Maria", "klas": "4C"}
klas = [leerling1, leerling2, leerling3]
for leerling in klas:
print(f"{leerling['naam']} zit in klas {leerling['klas']}")
In de volgende les leer je hoe je door een dictionary loopt en hoe je veilig controleert of een sleutel bestaat.
leerling1 = {"naam": "Sara", "klas": "3B"}
leerling2 = {"naam": "Alex", "klas": "3A"}
leerling3 = {"naam": "Maria", "klas": "4C"}
klas = [leerling1, leerling2, leerling3]
for leerling in klas:
print(f"{leerling['naam']} zit in klas {leerling['klas']}")