Lecții din modul (3/4)
Dicționare
Un dicționar (dict) este o hartă cheie → valoare: asociați o cheie
(aproape întotdeauna un șir) cu o valoare de orice tip. Este fundamentala
structura de date pentru modelarea entităților din lumea reală.
Crearea unui dicționar
vuoto = {}
utente = {"nome": "Ada", "anni": 36, "attivo": True}
# costruttore alternativo
utente = dict(nome="Ada", anni=36, attivo=True)Cheile trebuie să fie hashable (imuabile): șiruri, numere, tupluri de hashable elemente. Valorile, pe de altă parte, pot fi orice - chiar și alte dict.
Accesați, modificați, ștergeți
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"] # rimuoveRepetând peste un dict
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}")Ordinea de iterație este ordinea de inserție (garantată începând cu Python 3.7 în continuare).
Cheia există?
"nome" in utente # True
"email" in utente # False (NON usa il valore, usa la chiave!)setdefault: inițializați la primul acces
Un model frecvent: „dacă cheia nu există, introduceți valoarea implicită; în orice case returnează valoarea curentă”.
gruppi = {}
for nome in ["Ada", "Linus", "Ada", "Grace", "Linus", "Ada"]:
gruppi.setdefault(nome, []).append(1)
# {'Ada': [1, 1, 1], 'Linus': [1, 1], 'Grace': [1]}Există, de asemenea, collections.Counter pentru cazul specific al numărării (noi
îl va vedea în modulul stdlib).
Iterarea peste dicționare
Puteți itera un dicționar în mai multe moduri:
for k in d: buclă numai peste chei (comportament implicit).for k, v in d.items(): face bucle peste perechi cheie-valoare simultan (foarte util).for v in d.values(): buclă numai peste valori.
Încearcă
Dat `user = {'nome': 'Ada', 'anni': 36}`, adăugați cheia 'email' = 'ada@ex.com' și apoi atribuiți lui `email_or_default` valoarea cheii 'telefono' folosind .get cu implicit 'sconosciuto'. Evaluați `email_or_default`.
Afișează indiciu
.get('telefono', 'sconosciuto') nu generează KeyError.
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Având în vedere „prețuri = {”mela”: 1,2, „pera”: 1,5, „kiwi”: 2,0}”, calculați suma tuturor valorilor și atribuiți-o la „total”. Evaluați „total”.
Afișează indiciu
sum(prices.values()) adună toate valorile.
Soluție disponibilă după 3 încercări
Provocare suplimentară
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.
Afișează indiciu
Metoda get acceptă un al doilea parametru ca alternativă: user.get('rol', 'guest').
Soluție disponibilă după 3 încercări