11b Door een dictionary lopen
Je kunt nu dictionaries maken en waardes opzoeken met een sleutel. Je kunt ook door een dictionary lopen, en vooraf controleren of een sleutel bestaat.
Loopen over de sleutels
Een simpele for-loop op een dictionary geeft je de sleutels:
leerling = {"naam": "Sara", "leeftijd": 15, "klas": "3B"}
for sleutel in leerling:
print(sleutel)
Uitvoer:
naam
leeftijd
klas
Loopen over sleutels én waardes met .items()
Wil je beide tegelijk? Gebruik .items():
for sleutel, waarde in leerling.items():
print(f"{sleutel}: {waarde}")
Uitvoer:
naam: Sara
leeftijd: 15
klas: 3B
.items() levert elke ronde een paar: eerst de sleutel, dan de waarde.
Bestaat de sleutel? — de in-operator
Met in check je of een sleutel in de dictionary zit. Daarmee voorkom je een KeyError:
if "naam" in leerling:
print(leerling["naam"])
else:
print("Geen naam bekend.")
leerling = {"naam": "Sara", "klas": "3B"}
print("Sara" in leerling)
Er gaat iets mis
Twee namen zonder .items()
leerling = {"naam": "Sara", "klas": "3B"}
for sleutel, waarde in leerling:
print(sleutel, waarde)
Uitvoer:
ValueError: too many values to unpack (expected 2)
Zonder .items() krijg je per ronde alleen een sleutel, zoals "naam". Die probeert Python over twee namen te verdelen, en dat lukt niet. Schrijf for sleutel, waarde in leerling.items():.
De haakjes achter items vergeten
leerling = {"naam": "Sara", "klas": "3B"}
for sleutel, waarde in leerling.items:
print(sleutel, waarde)
Uitvoer:
TypeError: 'builtin_function_or_method' object is not iterable
.items zonder haakjes is de methode zelf, niet de paren die hij geeft. Zet de haakjes erachter: leerling.items().
Opdracht 11b.1: Prijzen-loop
Maak een dictionary prijzen = {"appel": 0.50, "banaan": 0.30} en loop er met .items() doorheen om elke prijs te printen.
# Schrijf hier je code
Klik hier voor een tip.
for product, prijs in prijzen.items(): — gebruik beide in een f-string.
Klik hier voor de oplossing.
prijzen = {"appel": 0.50, "banaan": 0.30}
for product, prijs in prijzen.items():
print(f"{product}: € {prijs}")
prijzen = {"appel": 0.50, "banaan": 0.30}
for product, prijs in prijzen.items():
print(f"{product}: € {prijs}")Opdracht 11b.2: Profielprinter
Maak een dictionary profiel met minstens 5 sleutels over jezelf. Loop met .items() over de dictionary en print elke regel netjes met een kop en een afsluiting.
Verwachte uitvoer:
=== Mijn Profiel ===
naam: Alex
leeftijd: 15
hobby: muziek
stad: Amsterdam
favoriete eten: pasta
====================
# Schrijf hier je code
Klik hier voor een tip.
for sleutel, waarde in profiel.items(): met een f-string f" {sleutel}: {waarde}" (let op de twee spaties voor de indent).
Klik hier voor de oplossing.
profiel = {
"naam": "Alex",
"leeftijd": 15,
"hobby": "muziek",
"stad": "Amsterdam",
"favoriete eten": "pasta"
}
print("=== Mijn Profiel ===")
for sleutel, waarde in profiel.items():
print(f" {sleutel}: {waarde}")
print("====================")
profiel = {
"naam": "Alex",
"leeftijd": 15,
"hobby": "muziek",
"stad": "Amsterdam",
"favoriete eten": "pasta"
}
print("=== Mijn Profiel ===")
for sleutel, waarde in profiel.items():
print(f" {sleutel}: {waarde}")
print("====================")Opdracht 11b.3: Digitaal winkelmandje
Bouw een winkelmandje met twee dictionaries: een winkel (product → prijs) en een mandje (product → aantal). Schrijf een functie bereken_totaal(winkel, mandje) die met .items() door het mandje loopt en de totaalprijs teruggeeft met return. Print daarnaast een kassabon.
Verwachte uitvoer:
=== Kassabon ===
Brood x2 -> 5.0 euro
Melk x1 -> 1.2 euro
Chocola x3 -> 10.5 euro
================
Totaal: 16.7 euro
# Schrijf hier je code
Klik hier voor een tip.
Drie stappen binnen de loop van bereken_totaal:
prijs = winkel[product]: zoek de prijs op.regel = prijs * aantal: bereken de regelprijs.totaal += regel: tel op.
Daarna return totaal.
Klik hier voor de oplossing.
winkel = {
"Brood": 2.50,
"Kaas": 4.00,
"Melk": 1.20,
"Appel": 0.80,
"Chocola": 3.50
}
mandje = {
"Brood": 2,
"Melk": 1,
"Chocola": 3
}
def bereken_totaal(winkel, mandje):
totaal = 0
for product, aantal in mandje.items():
prijs = winkel[product]
totaal += prijs * aantal
return totaal
print("=== Kassabon ===")
for product, aantal in mandje.items():
prijs = winkel[product]
print(f" {product} x{aantal} -> {prijs * aantal} euro")
print("================")
print(f"Totaal: {bereken_totaal(winkel, mandje)} euro")
winkel = {
"Brood": 2.50,
"Kaas": 4.00,
"Melk": 1.20,
"Appel": 0.80,
"Chocola": 3.50
}
mandje = {
"Brood": 2,
"Melk": 1,
"Chocola": 3
}
def bereken_totaal(winkel, mandje):
totaal = 0
for product, aantal in mandje.items():
prijs = winkel[product]
totaal += prijs * aantal
return totaal
print("=== Kassabon ===")
for product, aantal in mandje.items():
prijs = winkel[product]
print(f" {product} x{aantal} -> {prijs * aantal} euro")
print("================")
print(f"Totaal: {bereken_totaal(winkel, mandje)} euro")Variabelen, beslissen, herhalen, functies, lijsten en dictionaries: test jezelf met Waar of niet waar?, zestien stellingen op één hand-out.
En nu?
In de volgende les zet je dictionaries en lijsten in elkaar. Het paar dat .items() elke ronde teruggeeft heeft ook een naam: een tuple. Daarover gaat les 12.
Bij dijkstra loopt kies_volgende met .items() langs alle knopen om de dichtstbijzijnde onbezochte te vinden.