Ga naar hoofdinhoud

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])
Voorspel
Wat zet dit programma op het scherm?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.

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"].

Eerst op papier

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']}")
Waar kom je dit later weer tegen?

Dijkstra houdt per knoop de kortste afstand tot nu toe bij in een dictionary, en PageRank de score per pagina.