Articolo originale: https://www.freecodecamp.org/news/create-a-dictionary-in-python-python-dict-methods/

In questo articolo, imparerai le basi dei dizionari in Python.

Imparerai come creare dizionari, accedere agli elementi al loro interno e modificarli a seconda delle tue necessità.

Imparerai anche alcuni dei metodi integrati per dizionari più comuni.

Ecco quello che tratteremo:

  1. Definire un dizionario
    1.1 Definire un dizionario vuoto
    1.2 Definire un dizionario con elementi
  2. Una panoramica su chiavi e valori
    2.1 Trovare il numero di coppie chiave-valore in un dizionario
    2.2 Vedere tutte le coppie chiave-valore
    2.3 Vedere tutte le chiavi
    2.4 Vedere tutti i valori
  3. Accedere ai singoli elementi
  4. Modificare un dizionario
    4.1 Aggiungere nuovi elementi
    4.2 Aggiornare gli elementi
    4.3 Eliminare gli elementi

Come creare un dizionario in Python

Un dizionario in Python è composto da coppie chiave-valore.

Nelle seguenti due sezioni vedrai due modi per creare un dizionario.

Il primo modo è utilizzare delle parentesi graffe {} e il secondo modo è utilizzare la funzione integrata dict().

Come creare un dizionario vuoto in Python

Per creare un dizionario vuoto, inizia creando una variabile che corrisponderà al nome del dizionario.

Poi assegna la variabile a un paio di parentesi graffe, {}.

#crea un dizionario vuoto
dizionario_esempio = {}

print(dizionario_esempio)

#per verificare il tipo di dato usa la funzione type()
print(type(dizionario_esempio))

#output

#{}
#<class 'dict'>

Un altro modo per creare un dizionario vuoto è usare la funzione dict() senza passarle argomenti.

Agisce come un costruttore e crea un dizionario vuoto:

#crea un dizionario vuoto
dizionario_esempio = dict()

print(dizionario_esempio)

#per verificare il tipo di dato usa la funzione type()
print(type(dizionario_esempio))

#output

#{}
#<class 'dict'>

Come creare un dizionario con degli elementi in Python

Per creare un dizionario con degli elementi, devi includere le coppie chiave-valore tra le parentesi graffe.

La sintassi generica è la seguente:

nome_dizionario = {chiave: valore}

Analizziamola:

  • nome_dizionario è il nome della variabile. Questo è il nome del dizionario.
  • = è l'operatore di assegnazione che assegna la coppia chiave: valore a nome_dizionario .
  • Dichiariamo un dizionario con delle parentesi graffe, {}.
  • All'interno delle parentesi graffe ci sono le coppie chiave-valore. Le chiavi sono separate dai valori associati tramite due punti, :.

Vediamo un esempio di creazione di un dizionario con elementi:

#crea un dizionario
informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

print(informazioni)

#verifica il tipo di dato
print(type(informazioni))

#output

#{'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}
#<class 'dict'>

Nell'esempio qui sopra, c'è una sequenza di elementi all'interno delle parentesi graffe.

In modo specifico, ci sono tre coppie chiave-valore: 'nome': 'Dionysia', 'età': 28, e 'luogo': 'Atene'.

Le chiavi sono nome, età e luogo. I valori associati sono rispettivamente Dionysia, 28 e Atene.

Quando ci sono coppie chiave-valore multiple in un dizionario, ogni coppia chiave-valore è separata da una virgola, ,.

Vediamo un altro esempio.

Diciamo che stavolta vuoi creare un dizionario con degli elementi usando la funzione dict().

Puoi farlo usando dict() e passando come argomento della funzione le parentesi graffe con al loro interno la sequenza di coppie chiave-valore.

#crea un dizionario con dict()
informazioni = dict({'nome': 'Dionysia' ,'età': 28,'luogo': 'Atene'})

print(informazioni)

#controlla il tipo di dato
print(type(informazioni))

#output

#{'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}
#<class 'dict'>

Vale la pena di menzionare il metodo fromkeys(), che fornisce un altro modo di creare un dizionario.

Prende come argomento una sequenza predefinita di elementi e restituisce un nuovo dizionario con gli elementi nella sequenza impostati come le chiavi del dizionario.

Puoi impostare opzionalmente un insieme di valori per tutte le chiavi, ma di default il valore per le chiavi sarà None.

La sintassi generica del metodo è la seguente:

nome_dizionario = dict.fromkeys(sequenza, valore)

Vediamo un esempio di creazione di un dizionario usando fromkeys() senza impostare un valore per tutte le chiavi:

#crea una sequenza di stringhe
città = ('Parigi','Atene', 'Madrid')

#crea il dizionario, `dizionario_esempio`, usando il metodo fromkeys()
dizionario_esempio = dict.fromkeys(città)

print(dizionario_esempio)

#{'Parigi': None, 'Atene': None, 'Madrid': None}

Ora vediamo un altro esempio in cui impostiamo uno stesso valore per tutte le chiavi del dizionario:

#crea una sequenza di stringhe
città = ('Paris','Athens', 'Madrid')

#crea un singolo valore
continente = 'Europa'

dizionario_esempio = dict.fromkeys(città, continente)

print(dizionario_esempio)

#output

#{'Parigi': 'Europa', 'Atene': 'Europa', 'Madrid': 'Europa'}

Una panoramica di chiavi e valori nei dizionari in Python

Le chiavi all'interno di un dizionario Python possono essere solo di un tipo immutabile.

I tipi di dati immutabili in Python sono interi, stringhe, tuple, float e booleani.

Le chiavi di un dizionario non possono essere di un tipo mutabile, come set, liste o dizionari.

Quindi, ipotizziamo di avere il seguente dizionario:

dizionario_esempio = {True: "True",  1: 1,  1.1: 1.1, "uno": 1, "linguaggi": ["Python"]}

print(dizionario_esempio)

#output

#{True: 1, 1.1: 1.1, 'uno': 1, 'linguaggi': ['Python']}

Le chiavi del dizionario sono di tipo booleano, intero, float e stringa, che sono tutti accettabili.

Se provi a creare una chiave di un tipo mutabile otterrai un errore – in particolare, l'errore sarà un TypeError.

dizionario_esempio = {["Python"]: "linguaggi"}

print(dizionario_esempio)

#output

#line 1, in <module>
#    dizionario_esempio = {["Python"]: "linguaggi"}
#TypeError: unhashable type: 'list'

Nell'esempio qui sopra, ho provato a creare una chiave di tipo lista (un tipo di dato mutabile). Il risultato è l'errore TypeError: unhashable type: 'list'.

Parlando dei valori all'interno di un dizionario Python, non ci sono limitazioni. I valori possono essere di qualsiasi tipo – ovvero possono essere sia di tipo mutabile che immutabile.

Un'altra cosa da notare riguardo alle differenze tra chiavi e valori nei dizionari Python, è il fatto che le chiavi sono uniche. Ciò vuol dire che una chiave può apparire soltanto una volta in un dizionario, mentre possono esserci valori duplicati.

Come trovare il numero di coppie chiave-valore contenute in un dizionario in Python

La funzione len() restituisce la lunghezza totale dell'oggetto che viene passato come argomento.

Quando un dizionario viene passato come argomento della funzione, questa restituisce il numero totale di coppie chiave-valore contenute nel dizionario.

Ecco come trovare il numero di coppie chiave-valore usando len():

informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

print(len(informazioni))

#output

#3

Come vedere tutte le coppie chiave-valore contenute in un dizionario in Python

Per vedere tutte le coppie chiave-valore che si trovano all'interno di un dizionario, puoi usare il metodo integrato items():

anno_di_creazione = {'Python': 1993, 'JavaScript': 1995, 'HTML': 1993}

print(anno_di_creazione.items())

#output

#dict_items([('Python', 1993), ('JavaScript', 1995), ('HTML', 1993)])

Il metodo items() restituisce una lista di tuple contenenti le coppie chiave-valore presenti all'interno del dizionario.

Come vedere tutte le chiavi contenute in un dizionario in Python

Per vedere tutte le chiavi che si trovano in un dizionario, usa il metodo integrato keys():

anno_di_creazione = {'Python': 1993, 'JavaScript': 1995, 'HTML': 1993}

print(anno_di_creazione.keys())

#output

#dict_keys(['Python', 'JavaScript', 'HTML'])

Il metodo keys() restituisce una lista contenente solo le chiavi presenti nel dizionario.

Come vedere tutti i valori contenuti in un dizionario in Python

Per vedere tutti i valori presenti all'interno di un dizionario, usa il metodo integrato values():

anno_di_creazione = {'Python': 1993, 'JavaScript': 1995, 'HTML': 1993}

print(anno_di_creazione.values())

#output

#dict_values([1993, 1995, 1993])

Il metodo values() restituisce una lista contenente solo i valori presenti nel dizionario.

Come accedere a singoli elementi in un dizionario in Python

Lavorando con le liste, puoi accedere agli elementi di una lista tramite il nome della lista, usando la notazione con le parentesi quadre. Nella parentesi quadre occorre specificare l'indice (o posizione) dell'elemento.

Non puoi fare esattamente lo stesso con i dizionari.

Lavorando con i dizionari, non puoi accedere a un elemento usando un indice numerico, dato che i dizionari contengono coppie chiave-valore.

Invece, puoi accedere agli elementi usando il nome del dizionario e la notazione con parentesi quadre, ma specificando la chiave all'interno delle parentesi quadre.

Ogni chiave corrisponde a uno specifico valore, quindi devi usare la chiave associata al valore che ti interessa.

La sintassi generica è la seguente:

nome_dizionario[chiave]

Diamo un'occhiata al prossimo esempio su come accedere a un elemento in un dizionario Python:

informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

#accede al valore associato alla chiave 'età'
print(informazioni['età'])

#output

#28

Cosa accade se provi ad accedere a una chiave che non esiste all'interno del dizionario?

informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

#prova ad accedere al valore associato alla chiave 'lavoro'
print(informazioni['lavoro'])

#output

#line 4, in <module>
#    print(informazioni['lavoro'])
#KeyError: 'lavoro'

Il risultato è KeyError dato che la chiave non esiste nel dizionario.

Un modo per evitare che ciò accada è cercare prima all'interno del dizionario per vedere se la chiave esiste.

Puoi farlo usando la parola chiave in, che restituisce un valore booleano. Restituisce True se la chiave è presente nel dizionario e False se non lo è.

informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

#cerca la chiave 'lavoro'
print('lavoro' in informazioni)

#output

#False

Un altro modo per aggirare questo problema è accedere agli elementi nel dizionario usando il metodo get().

Occorre passare come argomento la chiave che stai cercando e get() restituisce il valore che corrisponde alla chiave indicata.

informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

#prova ad accedere alla chiave 'lavoro' usando il metodo get()
print(informazioni.get('lavoro'))

#output

#None

Come puoi notare, quando stai cercando una chiave che non esiste, di default  get() restituisce None invece di un KeyError.

Se invece del valore predefinito None, vuoi mostrare un messaggio diverso quando una chiave non esiste, puoi personalizzare get() fornendo un valore diverso.

Puoi farlo passando il nuovo valore come secondo argomento opzionale al metodo get():

informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

#prova ad accedere alla chiave 'lavoro' usando il metodo get()
print(informazioni.get('lavoro', 'Questo valore non esiste'))

#output

#Questo valore non esiste

Ora quando cerchi una chiave e questa non è presente nel dizionario, vedrai il messaggio Questo valore non esiste apparire sulla console.

Come modificare un dizionario in Python

I dizionari sono mutabili, che vuol dire che possono essere modificati.

Possono crescere e rimpicciolirsi durante la vita di un programma.

È possibile aggiungervi nuovi elementi, quelli esistenti possono essere aggiornati con nuovi valori e gli elementi possono essere cancellati.

Come aggiungere nuovi elementi a un dizionario in Python

Per aggiungere coppie chiave-valore a un dizionario, usa la notazione con parentesi quadre.

La sintassi generica è la seguente:

nome_dizionario[chiave] = valore

Prima, specifica il nome del dizionario. Poi, in parentesi quadre, crea la chiave e assegnale un valore.

Ipotizziamo di partire da un dizionario vuoto:

dizionario_esempio = {}

print(dizionario_esempio)

#output

#{}

Ecco come puoi aggiungere una coppia chiave-valore a dizionario_esempio:

dizionario_esempio = {}

#aggiunge una coppia chiave-valore al dizionario vuoto
dizionario_esempio['nome'] = "Mario Rossi"

#stampa il dizionario
print(dizionario_esempio)

#output

#{'nome': 'Mario Rossi'}

Ed ecco come puoi aggiungere un'altra coppia chiave-valore:

dizionario_esempio = {}

#aggiunge una coppia chiave-valore al dizionario vuoto
dizionario_esempio['nome'] = "Mario Rossi"

#aggiunge un'altra coppia chiave-valore
dizionario_esempio['età'] = 34

#stampa il dizionario
print(dizionario_esempio)

#output

#{'nome': 'Mario Rossi', 'età': 34}

Tieni a mente che se la chiave che stai provando ad aggiungere esiste già nel dizionario e le stai assegnando un valore diverso, il valore della chiave sarà aggiornato.

Ricorda che le chiavi devono essere uniche.

dizionario_esempio = {'nome': "Mario Rossi", 'età': 34}

print(dizionario_esempio)

#prova a creare una chiave 'età' e assegnarle un valore
#la chiave 'età' esiste già

dizionario_esempio['età'] = 46

#il valore di 'età' è stato aggiornato

print(dizionario_esempio)

#output

#{'nome': "Mario Rossi", 'età': 34}
#{'nome': "Mario Rossi", 'età': 46}

Se vuoi evitare di cambiare il valore di una chiave già esistente per sbaglio, dovresti verificare se la chiave che stai cercando di aggiungere è già presente nel dizionario.

Puoi farlo con la parola chiave in come abbiamo discusso precedentemente:

dizionario_esempio = {'nome': "Mario Rossi", 'età': 34}

#voglio aggiungere la chiave `età`. Prima di farlo verifico se già esiste
print('età' in dizionario_esempio)

#output

#True

Come aggiornare gli elementi di un dizionario in Python

Aggiornare gli elementi di un dizionario è simile ad aggiungere elementi.

Quando sai di voler aggiornare il valore di una chiave esistente, usa la seguente sintassi generica, come abbiamo visto nella sezione precedente:

nome_dizionario[chiave_esistente] = nuovo_valore
dizionario_esempio = {'nome': "Mario Rossi", 'età': 34}

dizionario_esempio['età'] = 46

print(dizionario_esempio)

#output

#{'nome': "Mario Rossi", 'età': 46}

Per aggiornare un dizionario, puoi anche usare il metodo integrato update().

Questo metodo è particolarmente utile quando vuoi aggiornare più di un valore all'interno di un dizionario in una sola volta.

Diciamo che vuoi aggiornare le chiavi nome e età in dizionario_esempio e aggiungere una nuova chiave, occupazione:

dizionario_esempio = {'nome': "Mario Rossi", 'età': 34}

dizionario_esempio.update(nome= 'Marco Bianchi', età = 46, occupazione = "sviluppatore software")

print(dizionario_esempio)

#output

#{'nome': 'Marco Bianchi', 'età': 46, 'occupazione': 'sviluppatore software'}

Il metodo update() prende una tupla di coppie chiave-valore.

Le chiavi che esistenti sono state aggiornate con i nuovi valori assegnati e la nuova coppia chiave-valore è stata aggiunta.

Il metodo update() è utile anche quando vuoi aggiungere il contenuto di un dizionario in un altro.

Ipotizziamo di avere il dizionario numeri, e un secondo dizionario, altri_numeri.

Se vuoi unire il contenuto di altri_numeri con il contenuto di numeri, usa il metodo update().

Tutte le coppie chiave-valore contenute in altri_numeri saranno aggiunte alla fine del dizionario numeri.

numeri = {'uno': 1, 'due': 2, 'tre': 3}
altri_numeri = {'quattro': 4, 'cinque': 5, 'sei': 6}

#aggiorna il dizionario 'numeri'
#aggiungendo il contenuto del dizionario 'altri_numeri',
#alla sua fine
numeri.update(altri_nummeri)

print(numeri)

#output

#{'uno': 1, 'due': 2, 'tre': 3, 'quattro': 4, 'cinnque': 5, 'sei': 6}

Come cancellare degli elementi da un dizionario in Python

Uno dei modi per cancellare una chiave specifica e il suo valore associato da un dizionario è usare la parola chiave del.

La sintassi è la seguente:

del nome_dizionario[chiave]

Ad esempio, ecco come cancellare la chiave luogo dal dizionario informazioni:

informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

del informazioni['luogo']

print(informazioni)

#output

#{'nome': 'Dionysia', 'età': 28}

Se vuoi rimuovere una chiave, ma vuoi anche salvare il valore rimosso, usa il metodo integrato pop().

Il metodo pop() rimuove la chiave specificata ma la restituisce anche. In questo modo, puoi conservare in una variabile il valore rimosso per usarlo o recuperarlo in seguito.

Devi passare la chiave che vuoi rimuovere come argomento del metodo.

Ecco la sintassi generica per farlo:

nome_dizionario.pop(chiave)

Segui l'esempio qui sotto per rimuovere la chiave luogo dell'esempio precedente, ma usando il metodo pop() e salvando il valore associato in una variabile:

informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

città = informazioni.pop('luogo')

print(informazioni)
print(città)

#output

#{'nome': 'Dionysia', 'età': 28}
#Atene

Se specifichi una chiave che non esiste nel dizionario otterrai un messaggio di errore KeyError:

informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

informazioni.pop('occupazione')

print(informazioni)

#output

#line 3, in <module>
#   informazioni.pop('occupazione')
#KeyError: 'occupazione'

Un modo per aggirare l'errore è passare un secondo argomento al metodo pop().

Includendo il secondo argomento, se la chiave non esiste, il dizionario resterà invariato e non ci sarà alcun errore.

informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

informazioni.pop('occupazione','Not found')

print(informazioni)

#output

#{'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

Il metodo pop() rimuove una chiave specifica e il suo valore associato – ma se volessi cancellare solo l'ultima coppia chiave-valore di un dizionario?

Per questo, esiste il metodo integrato popitem().

La sintassi generica del metodo popitem() è:

nome_dizionario.popitem()

Il metodo popitem() non prende argomenti e rimuove e restituisce l'ultima coppia chiave-valore di un dizionario.

informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

elemento_rimosso = informazioni.popitem()

print(informazioni)
print(elemento_rimosso)

#output

#{'nome': 'Dionysia', 'età': 28}
#('luogo', 'Atene')

Infine, se vuoi cancellare tutte le coppie chiave-valore da un dizionario, usa il metodo integrato clear().

informazioni = {'nome': 'Dionysia', 'età': 28, 'luogo': 'Atene'}

informazioni.clear()

print(informazioni)

#output

#{}

Usando questo metodo otterrai un dizionario vuoto.

Conclusione

E il gioco è fatto! Adesso conosci le basi dei dizionari in Python.

Spero tu abbia trovato utile questo articolo.

Per imparare di più sul linguaggio di programmazione Python, dai un'occhiata alla certificazione di freeCodeCamp Scientific Computing with Python.

Il corso è adatto a principianti: partirai dalle basi e imparerai Python in modo interattivo. Alla fine dovrai anche realizzare cinque progetti per mettere in pratica e consolidare ciò che hai imparato.

Grazie per aver letto questo articolo e buona programmazione!