Modulelessen (3/4)
Woordenboeken
Een woordenboek (dict) is een sleutel → waarde kaart: u koppelt een sleutel
(bijna altijd een string) met een waarde van welk type dan ook. Het is het fundamentele
datastructuur voor het modelleren van entiteiten uit de echte wereld.
Een woordenboek maken
vuoto = {}
utente = {"nome": "Ada", "anni": 36, "attivo": True}
# costruttore alternativo
utente = dict(nome="Ada", anni=36, attivo=True)Sleutels moeten hashbaar (onveranderlijk) zijn: tekenreeksen, getallen, tupels hashbaar elementen. Waarden daarentegen kunnen van alles zijn, zelfs andere dictaten.
Toegang, wijzigen, verwijderen
utente["nome"] # 'Ada'
utente["email"] # KeyError!
utente.get("email") # None (default sicuro)
utente.get("email", "—") # '—' (default custom)
utente["citta"] = "Roma" # aggiunge / aggiorna
del utente["attivo"] # rimuoveEen dictaat herhalen
for chiave in utente: # itera sulle CHIAVI (default)
print(chiave, utente[chiave])
for chiave in utente.keys(): # esplicito
...
for valore in utente.values():
print(valore)
for chiave, valore in utente.items(): # idiom più comune
print(f"{chiave} = {valore}")De iteratievolgorde is de invoegvolgorde (gegarandeerd sinds Python 3.7 verder).
Bestaat de sleutel?
"nome" in utente # True
"email" in utente # False (NON usa il valore, usa la chiave!)setdefault: initialiseren bij eerste toegang
Een veel voorkomend patroon: "als de sleutel niet bestaat, plaats dan de standaardwaarde; in welke dan ook geval de huidige waarde retourneert".
gruppi = {}
for nome in ["Ada", "Linus", "Ada", "Grace", "Linus", "Ada"]:
gruppi.setdefault(nome, []).append(1)
# {'Ada': [1, 1, 1], 'Linus': [1, 1], 'Grace': [1]}Er is ook collections.Counter voor het specifieke geval van tellen (we
zal het zien in de stdlib-module).
Itereren over woordenboeken
U kunt op verschillende manieren een woordenboek doorlopen:
for k in d: loopt alleen over sleutels heen (standaardgedrag).for k, v in d.items(): loopt gelijktijdig over sleutel-waardeparen (zeer nuttig).for v in d.values(): loopt alleen over waarden heen.
Probeer het
Gegeven `user = {'nome': 'Ada', 'anni': 36}`, voeg de sleutel 'email' = 'ada@ex.com' toe en wijs vervolgens aan `email_or_default` de waarde van de sleutel 'telefono' toe met behulp van .get met standaard 'sconosciuto'. Evalueer `email_of_default`.
Toon hint
.get('telefono', 'sconosciuto') genereert KeyError niet.
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
Gegeven `prices = {'mela': 1.2, 'pera': 1.5, 'kiwi': 2.0}`, bereken de som van alle waarden en wijs deze toe aan `total`. Evalueer 'totaal'.
Toon hint
sum(prices.values()) telt alle waarden bij elkaar op.
Oplossing beschikbaar na 3 pogingen
Extra uitdaging
Given the dictionary `user = {'name': 'Alice'}`, use the `.get()` method to retrieve the value of the key `'role'`. If the key does not exist, make it return the default value `'guest'`. Store the result in `user_role` and evaluate it.
Toon hint
De get-methode accepteert een tweede parameter als fallback: user.get('role', 'guest').
Oplossing beschikbaar na 3 pogingen