Kies een default voor ontbreken
Laat lookup nul teruggeven als key niet in stock staat.
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.
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 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.
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))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.
| Sleutel | Oude waarde | Toevoeging | Nieuwe waarde |
|---|---|---|---|
| lijn-4 | 3 | 2 | 5 |
| lijn-2 | Ontbreekt, dus default 0 | 4 | 4 |
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.
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.
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.
def add_delay(delays, line, minutes):
delays[line] = minutes
delays = {"lijn-4": 3}
add_delay(delays, "lijn-4", 2)
print(delays["lijn-4"])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.
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.
Laat lookup nul teruggeven als key niet in stock staat.
Laat restock amount bij het bestaande aantal optellen en dezelfde dictionary wijzigen.
Laat labels teksten sleutel=aantal in invoegvolgorde teruggeven.
Laat remove_item de sleutel verwijderen en de oude waarde teruggeven, of nul bij ontbreken.
Hierna verzamel je unieke waarden waarvoor je geen bijbehorend aantal hoeft te bewaren.
Voer je code uit en ontdek
wat je hebt gemaakt.
Je hoeft het niet in één keer goed te doen. Na het uitvoeren zie je hier welke stappen al kloppen.