2.9. Dizionari¶
Un dizionario è una mappatura da chiavi a valori. Ogni chiave viene cercata direttamente; il dizionario ricorda quale valore è stato associato per ultimo a quella chiave.
2.9.1. Creare dizionari¶
Usa le parentesi graffe con coppie key: value, oppure il costruttore dict:
empty = {}
person = {"name": "OpenMV", "id": 42}
counts = dict(a=1, b=2, c=3) # keyword form
pairs = dict([("x", 1), ("y", 2)]) # from a list of pairs
I valori possono essere di qualsiasi tipo – stringhe, numeri, liste, persino altri dict:
config = {
"name": "OpenMV",
"id": 42,
"width": 320,
"tags": ["red", "round"],
}
Ogni chiave in un dizionario mappa esattamente a un valore.¶
2.9.2. Accesso e appartenenza¶
L’indicizzazione con [] recupera il valore associato a una chiave. Una chiave mancante solleva KeyError:
>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'missing'
Per una ricerca tollerante, usa dict.get(). Restituisce None per una chiave mancante, oppure un valore che passi come secondo argomento:
>>> person.get("name")
'OpenMV'
>>> person.get("missing") # returns None
>>> person.get("missing", "n/a")
'n/a'
La parola chiave in verifica l’appartenenza di una chiave – non di un valore:
>>> "name" in person
True
>>> "OpenMV" in person
False
2.9.3. Aggiungere, aggiornare e rimuovere¶
Assegnare a d[key] aggiunge la voce se la chiave è nuova e la sovrascrive se esiste già:
>>> person["seen"] = 1
>>> person["seen"] = 2 # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}
La rimozione ha diverse forme:
del d[key]– rimuove una voce; sollevaKeyErrorse la chiave è mancante.dict.pop()– rimuove e restituisce il valore; un valore predefinito opzionale permette di evitare l’eccezione.dict.clear()– rimuove tutte le voci.
dict.update() unisce un altro dizionario (o una lista di coppie (key, value)) in quello ricevente, sovrascrivendo eventuali chiavi corrispondenti:
>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}
2.9.4. Iterare¶
Iterare direttamente un dizionario produce le sue chiavi, nell’ordine di inserimento:
for k in person:
print(k)
Tre viste forniscono un accesso esplicito:
dict.keys()– le chiavi (come iterare il dict).dict.values()– i valori.dict.items()– tuple(key, value), perfette per lo spacchettamento in un ciclo.
for key, value in person.items():
print(key, "=", value)
2.9.5. Cosa può essere una chiave¶
Le chiavi di un dizionario devono essere hashable – il loro valore non può cambiare durante la loro esistenza. I tipi hashable comuni sono:
I tipi mutabili come list, dict e bytearray non possono essere chiavi; usarne uno solleva TypeError. Le tuple di valori immutabili sono il modo standard per indicizzare un dizionario tramite un identificatore composito, come una coordinata di griglia 2D:
>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"
2.9.6. Lunghezza¶
len() restituisce il numero di voci:
>>> len(person)
4