Salt la conținutul principal
Modulul 3 · Lecția 3 din 411/36 în curs~12 min
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

Python
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

Python
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"]      # rimuove

Repetând peste un dict

Python
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ă?

Python
"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ă”.

Python
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ă

Exercițiu#python.m3.l3.e1
Încercări: 0Se încarcă…

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`.

Se încarcă editorul...
Afișează indiciu

.get('telefono', 'sconosciuto') nu generează KeyError.

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#python.m3.l3.e2
Încercări: 0Se încarcă…

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”.

Se încarcă editorul...
Afișează indiciu

sum(prices.values()) adună toate valorile.

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#python.m3.l3.e3
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
Afișează indiciu

Metoda get acceptă un al doilea parametru ca alternativă: user.get('rol', 'guest').

Soluție disponibilă după 3 încercări