Als developer, wil ik bij elkaar horende gegevens onder één naam bewaren in plaats van in losse lijsten, zodat de koppeling niet kan verschuiven en ik in één oogopslag zie wat bij elkaar hoort.
.keys(), .values(), .items()
Loop over alle sleutels, waarden, of sleutel-waardeparen. En: hoe je je stap-voor-stap data van lijsten naar dictionaries refactort.
Tot nu toe hebt je sleutels en waarden opgehaald met dict["key"] en dict.get("key"). Nu leer je erover heen loopen β wat handig is als je alle gegevens wilt verwerken.
Een dictionary heeft vier manieren om te itereren:
device = {"hostname": "sensor1", "cpu": 45, "memory": 78}
# 1. Direct loopen (standaard) β alleen sleutels
for key in device:
print(key) # hostname cpu memory
# 2. .keys() β expliciet dezelfde
for key in device.keys():
print(key)
# 3. .values() β alleen waarden
for val in device.values():
print(val) # sensor1 45 78
# 4. .items() β sleutel ΓN waarde tegelijk
for key, val in device.items():
print(f"{key}: {val}") # hostname: sensor1 enz.
for key, val in d.items():
print(f"{key}: {val}")
# Je hebt beide nodig
for key in d:
val = d[key]
print(f"{key}: {val}")
# Omslachtig & langzaam
Probeer: kies een iteratiemethode en zie het resultaat
.items() als je sleutel EN waarde nodig hebt. Gebruik .keys() of .values() als je maar één nodig hebt.
Experimenteer: maak een dictionary en loop erover op verschillende manieren.
In taak 1 maakte je twee losse lijsten. In taak 2 maakte je dictionaries. Nu maak je de omzetting af. Bestand: order_report.py
"product" en "quantity". Denk aan enumerate() uit sprint 3 om de bijbehorende waarde uit de tweede lijst te halen.order..items(). Let op: .items() werkt op één dictionary, niet op de lijst zelf."quantity"-waarden bij elkaar op.Acceptatiecriteria
order_report.py.order bevat dictionaries met "product" en "quantity"..items() alle sleutel-waardeparen geprint.