← Python/Verzamelen en veranderen
Les 4 van 8
MODULE 04 · 04◷ 26 min

Koppel sleutels aan waarden

Na deze les kun je
  • Waarden met een sleutel opzoeken
  • Bestaande waarden gericht aanpassen
  • Items doorlopen en veilig verwijderen

Je wilt weten hoeveel minuten iedere buslijn vertraging heeft. Positie nul zegt weinig, maar de sleutel "lijn-4" maakt meteen duidelijk welke verbinding je bedoelt. Een dictionary koppelt zulke betekenisvolle sleutels aan waarden.

Opzoeken met een sleutel

Een dictionary bewaart paren van een sleutel en een waarde. Je schrijft bijvoorbeeld delays = {"lijn-4": 3, "lijn-8": 0}. De dubbele punt koppelt elke sleutel aan haar waarde; komma's scheiden de paren.

Met delays["lijn-4"] lees je de bijbehorende drie minuten. Ontbreekt een sleutel, dan geeft deze vorm een KeyError. Python kiest niet zelf een vervangende waarde.

De methode get laat je wel een default kiezen: delays.get("lijn-2", 0) geeft nul wanneer lijn twee ontbreekt. Een aanwezige nul blijft gewoon een geldige waarde. Get verandert de dictionary niet en voegt een ontbrekende sleutel niet toe.

Een melding verwerken

Een toekenning zoals delays["lijn-4"] = 5 verandert de waarde bij die sleutel. Was de sleutel nog niet aanwezig, dan wordt zij toegevoegd. Er blijft per sleutel maar één waarde bestaan.

Druk op Voorbeeld uitvoeren. De melding voegt twee minuten toe aan een bekende lijn en vier aan een nieuwe lijn; daarna worden alle meldingen doorlopen.

Vertragingsmeldingen per buslijn samenvoegen
def add_delay(delays, line, minutes):
    delays[line] = delays.get(line, 0) + minutes

delays = {"lijn-4": 3, "lijn-8": 0}
add_delay(delays, "lijn-4", 2)
add_delay(delays, "lijn-2", 4)
for line, minutes in delays.items():
    print(f"{line}: {minutes}")
removed = delays.pop("lijn-4", 0)
print(removed)
print(delays.get("lijn-4", 0))
Verwachte uitvoer
lijn-4: 5
lijn-8: 0
lijn-2: 4
5
0

De functie leest eerst het oude aantal met default nul. Vervolgens telt zij de nieuwe minuten daarbij op en bewaart het totaal onder dezelfde sleutel. Zo werkt dezelfde berekening voor een bekende én een ontbrekende lijn.

SleutelOude waardeToevoegingNieuwe waarde
lijn-4325
lijn-2Ontbreekt, dus default 044

De dictionary bij de aanroeper verandert. Zoals bij het wijzigen van een lijst hoeft deze functie geen nieuw object terug te geven. Zonder expliciete return ontvangt de aanroeper None.

Sleutel en waarde samen doorlopen

Met items krijg je de sleutel-waardeparen om te doorlopen. In for line, minutes in delays.items(): pak je elk paar uit in twee namen. Dat sluit aan bij het uitpakken uit de vorige les.

Dictionaries bewaren de invoegvolgorde van sleutels. Een bestaande waarde vervangen verplaatst haar sleutel niet; een nieuwe sleutel komt achter de eerdere sleutels. Daarom verschijnt lijn twee in het voorbeeld als laatste.

De opdrachten gebruiken die volgorde om een lijst met labels op te bouwen. Begin met een lege lijst, maak voor ieder paar een f-string en voeg die achteraan toe. De gevraagde tekstvorm is sleutel=aantal, zonder spaties rond het gelijkteken.

Veelgemaakte fout: het oude aantal overschrijven

Toevoegen aan een bestaand aantal en dat aantal vervangen zijn verschillende afspraken. Deze zelfstandige foutvariant slaat alleen de nieuwe melding op. Voorspel hoeveel minuten er overblijven van de oorspronkelijke drie plus de nieuwe twee.

De nieuwe melding overschrijft de oude vertraging
def add_delay(delays, line, minutes):
    delays[line] = minutes

delays = {"lijn-4": 3}
add_delay(delays, "lijn-4", 2)
print(delays["lijn-4"])
Verwachte uitvoer
2

De uitvoer is twee, terwijl vijf nodig was. De toekenning heeft de oude waarde vervangen zonder die eerst in de berekening mee te nemen. Lees het bestaande aantal voordat je het nieuwe totaal bewaart.

Een waarde lezen en verwijderen

De methode pop combineert opzoeken met verwijderen. delays.pop("lijn-4", 0) verwijdert de sleutel en geeft de vorige waarde terug. Ontbreekt de sleutel, dan krijg je de gekozen default nul en blijft de inhoud gelijk.

Het werkende voorbeeld verwijdert lijn vier op deze manier. Daarna geeft get voor die lijn nul: de melding is werkelijk verdwenen. Alleen get gebruiken zou het juiste getal kunnen opleveren, maar de sleutel laten staan.

AAN DE SLAG 0/4
1

Kies een default voor ontbreken

Laat lookup nul teruggeven als key niet in stock staat.

2

Verhoog in plaats van vervangen

Laat restock amount bij het bestaande aantal optellen en dezelfde dictionary wijzigen.

3

Doorloop sleutel en waarde

Laat labels teksten sleutel=aantal in invoegvolgorde teruggeven.

4

Lees én verwijder

Laat remove_item de sleutel verwijderen en de oude waarde teruggeven, of nul bij ontbreken.

Wat je meeneemt

  • Een dictionary koppelt unieke sleutels aan waarden; get biedt een default bij ontbreken.
  • Voor verhogen lees je eerst de oude waarde; toewijzen alleen vervangt haar.
  • Items doorloopt paren in invoegvolgorde, terwijl pop een paar verwijdert en de waarde teruggeeft.

Hierna verzamel je unieke waarden waarvoor je geen bijbehorend aantal hoeft te bewaren.

main.py
UitvoerPython
›
›_

Hier komt je resultaat.

Voer je code uit en ontdek
wat je hebt gemaakt.

0/4 stappen
EVEN MEEKIJKEN

Bekijk hoe het kan.

Je mag de oplossing bekijken. Deze poging telt dan niet mee als afgeronde les. Met Reset kun je daarna opnieuw zelf oefenen.