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: le coppie chiave-valore in un dizionario non sono ordinate o ordinabili.

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: Nei dizionari l’ordine delle chiavi non è garantito. Il tuo risultato potrebbe non essere uguale a questo.

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

Puoi ottenere tutti i valori di un dizionario con values() (come oggetto iterabile). Anche in questo caso, per averle in formato lista, è necessario utilizzare list(). Anche in questo caso, come per le chiavi, l’ordine non è garantito

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

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, 'tre': 3, 'quattro': 4, 'cinque': 5, 'due': 2}

Un altro modo:

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

Rimuovi una chiave da un dizionario con del

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

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.