Python ABC

Se vuoi imparare Python parti dall'ABC

View project on GitHub

Tipi: Dizionari

Prima di studiare i dizionari assicurati di conoscere le liste.

Un dizionario è come una lista che ha un nome al posto dell’indice, è un insieme di coppie chiave-valore.

Importante: da Python 3.7 i dizionari conservano l’ordine di inserimento delle coppie chiave-valore. Le chiavi non vengono ordinate automaticamente per nome o valore.

Se in una lista è possibile accedere ad un dato in questo modo:

>>> li[3]
4

In un dizionario potrò accedervi così:

>>> persona['nome']
Pippo

Un variabile di tipo dizionario di crea in questo:

>>> empty_dict= {}

Si può anche definire direttamente un dizionario pre-caricato

>>> filled_dict = {"uno": 1, "due": 2, "tre": 3}

Importante: le chiavi dei dizionari devono essere di tipo immutabile. Questo per assicurare che le chiavi possano essere convertite in chiavi hash costanti per un risposta più veloce.

>>> invalid_dict = {[1,2,3]: "123"}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

I valori, invece, possono essere di qualunque tipo

>>> valid_dict = {(1,2,3):[1,2,3]}

Si accede ai valori indicando la chiave tra []

>>> filled_dict["uno"]
1

Puoi ottenere tutte le chiavi di un dizionario con keys() (come oggetto iterabile). Per averle in formato lista è necessario utilizzare list().

Importante: da Python 3.7 l’ordine delle chiavi corrisponde all’ordine di inserimento. Nelle versioni precedenti del linguaggio questa garanzia non era prevista.

>>> list(filled_dict.keys())
['uno', 'due', 'tre']

Puoi ottenere tutti i valori di un dizionario con values() (come oggetto iterabile). Per avere i valori in formato lista è necessario utilizzare list(). I valori seguono lo stesso ordine delle chiavi.

>>> list(filled_dict.values())
[1, 2, 3]

Controlla l’esistenza delle chiavi in un dizionario con in

>>> "uno" in filled_dict
True
>>> 1 in filled_dict
False

Cercando una chiave non esistente genera un KeyError

>>> filled_dict["quattro"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'quattro'

sa il metodo get() per evitare KeyError

>>> filled_dict.get("uno")
1
>>> filled_dict.get("quattro")

Il metodo get supporta un argomento di default quando il valore è mancante

>>> filled_dict.get("uno", 4)
1
>>> filled_dict.get("quattro", 4)
4

setdefault() inserisce un valore per una chiave in un dizionario solo se la chiave data non è già presente

>>> filled_dict.setdefault("cinque", 5)
5
>>> filled_dict.setdefault("cinque", 6)
5

Aggiungere una coppia chiave->valore a un dizionario

>>> filled_dict.update({"quattro":4})
>>> filled_dict
{'uno': 1, 'due': 2, 'tre': 3, 'cinque': 5, 'quattro': 4}

Un altro modo:

>>> filled_dict["sette"] = 7
>>> filled_dict
{'uno': 1, 'due': 2, 'tre': 3, 'cinque': 5, 'quattro': 4, 'sette': 7}

Rimuovi una chiave da un dizionario con del

>>> del filled_dict["uno"]
>>> filled_dict
{'due': 2, 'tre': 3, 'cinque': 5, 'quattro': 4, 'sette': 7}

Da Python 3.5 puoi anche usare ulteriori opzioni di spacchettamento

>>> {'a': 1, **{'b': 2}}
{'a': 1, 'b': 2}

This content is a derivative of “Learn X in Y minutes” by adambard, used under a CC BY-SA 3.0 license.