Python - Dizionari Annidati

Ciao a tutti, aspiranti coder! Oggi esploreremo il fascinante mondo dei dizionari annidati in Python. Non preoccupatevi se siete nuovi alla programmazione: vi guiderò passo per passo attraverso questo argomento, proprio come ho fatto per innumerevoli studenti durante gli anni della mia insegnamento. Quindi, prenda il suo bevanda preferita, si rilassi e ci imbarciamo insieme in questa avventura Python!

Python - Nested Dictionaries

Dizionari Annidati

Cos'è un Dizionario Annidato?

Immagina di avere una grande scatola (il dizionario principale) e all'interno di questa scatola ci siano diverse scatole più piccole (i dizionari annidati). Ogni una di queste scatole più piccole può contenere vari oggetti (coppie chiave-valore). Questo, in sostanza, è un dizionario annidato: un dizionario all'interno di un altro dizionario.

Iniziamo con un esempio semplice:

studente = {
"nome": "Alice",
"età": 20,
"voti": {
"matematica": 95,
"scienze": 88,
"storia": 92
}
}

In questo esempio, studente è il nostro dizionario principale. Contiene informazioni di base su Alice, inclusa un dizionario annidato voti che contiene i suoi punteggi in diverse materie.

Creazione di un Dizionario Annidato in Python

Creare un dizionario annidato è simile a creare un dizionario normale, ma si aggiunge un altro dizionario come valore. Creiamo un esempio più complesso - un elenco delle classi di una scuola:

scuola = {
"Classe 9": {
"Alice": {
"età": 14,
"materie": ["Matematica", "Scienze", "Inglese"]
},
"Bob": {
"età": 15,
"materie": ["Storia", "Arte", "Educazione Fisica"]
}
},
"Classe 10": {
"Charlie": {
"età": 16,
"materie": ["Fisica", "Chimica", "Biologia"]
}
}
}

Qui, abbiamo un dizionario principale scuola, che contiene i livelli delle classi come chiavi. Ogni livello di classe contiene i nomi degli studenti come chiavi. Ogni studente ha poi il proprio dizionario con informazioni personali.

Aggiunta di Elementi a un Dizionario Annidato in Python

Aggiungere elementi a un dizionario annidato è semplice. Puoi aggiungere una nuova coppia chiave-valore a un dizionario annidato esistente o creare un nuovo dizionario annidato del tutto.

Aggiungiamo un nuovo studente alla Classe 10:

scuola["Classe 10"]["Diana"] = {
"età": 15,
"materie": ["Matematica", "Informatica", "Letteratura"]
}

print(scuola["Classe 10"])

Output:

{
'Charlie': {'età': 16, 'materie': ['Fisica', 'Chimica', 'Biologia']},
'Diana': {'età': 15, 'materie': ['Matematica', 'Informatica', 'Letteratura']}
}

Possiamo anche aggiungere un nuovo livello di classe:

scuola["Classe 11"] = {
"Eve": {
"età": 17,
"materie": ["Economia", "Psicologia", "Francese"]
}
}

print(scuola.keys())

Output:

dict_keys(['Classe 9', 'Classe 10', 'Classe 11'])

Accesso agli Elementi di un Dizionario Annidato in Python

Per accedere agli elementi di un dizionario annidato, usiamo più parentesi quadre, ognuna rappresenta un livello di annidamento. Recuperiamo alcune informazioni dal nostro dizionario scuola:

# Ottenendo l'età di Alice
alice_età = scuola["Classe 9"]["Alice"]["età"]
print(f"Età di Alice: {alice_età}")

# Ottenendo le materie di Charlie
charlie_materie = scuola["Classe 10"]["Charlie"]["materie"]
print(f"Materie di Charlie: {charlie_materie}")

Output:

Età di Alice: 14
Materie di Charlie: ['Fisica', 'Chimica', 'Biologia']

Ricorda, se non sei sicuro della struttura del tuo dizionario annidato, puoi sempre usare il metodo get() per evitare eccezioni KeyError:

# Provando a ottenere uno studente non esistente
frank_età = scuola.get("Classe 9", {}).get("Frank", {}).get("età", "Non trovato")
print(f"Età di Frank: {frank_età}")

Output:

Età di Frank: Non trovato

Eliminazione di un Dizionario da un Dizionario Annidato

Per rimuovere un dizionario annidato, usiamo la parola chiave del. Rimuoviamo Bob dalla Classe 9:

del scuola["Classe 9"]["Bob"]
print(scuola["Classe 9"])

Output:

{'Alice': {'età': 14, 'materie': ['Matematica', 'Scienze', 'Inglese']}}

Attenzione quando si eliminano elementi dai dizionari annidati. Assicurati sempre che le chiavi esistano per evitare eccezioni KeyError.

Iterazione attraverso un Dizionario Annidato in Python

Iterare attraverso un dizionario annidato richiede cicli annidati. Stampiamo tutte le informazioni nel nostro dizionario scuola:

for classe, studenti in scuola.items():
print(f"\n{classe}:")
for studente, info in studenti.items():
print(f"  {studente}:")
for chiave, valore in info.items():
print(f"    {chiave}: {valore}")

Output:

Classe 9:
Alice:
età: 14
materie: ['Matematica', 'Scienze', 'Inglese']

Classe 10:
Charlie:
età: 16
materie: ['Fisica', 'Chimica', 'Biologia']
Diana:
età: 15
materie: ['Matematica', 'Informatica', 'Letteratura']

Classe 11:
Eve:
età: 17
materie: ['Economia', 'Psicologia', 'Francese']

Questa struttura di ciclo annidato consente di accedere e stampare tutti i livelli del nostro dizionario annidato.

Metodi per Lavorare con Dizionari Annidati

Ecco una tabella di metodi utili per lavorare con dizionari annidati:

Metodo Descrizione
dict.items() Restituisce un oggetto vista contenente coppie chiave-valore del dizionario
dict.keys() Restituisce un oggetto vista contenente le chiavi del dizionario
dict.values() Restituisce un oggetto vista contenente i valori del dizionario
dict.get(key, default) Restituisce il valore per la chiave specificata se esiste, altrimenti restituisce il valore predefinito
dict.update(other_dict) Aggiorna il dizionario con elementi da un altro dizionario o iterable di coppie chiave-valore
dict.pop(key, default) Rimuove e restituisce il valore per la chiave specificata. Se la chiave non esiste, restituisce il valore predefinito

Ricorda, questi metodi possono essere applicati a qualsiasi livello di un dizionario annidato.

E ce l'abbiamo fatta, miei cari studenti! Abbiamo esplorato i dettagli dei dizionari annidati in Python. Dalla creazione e aggiunta di elementi all'accesso, eliminazione e iterazione attraverso di essi, ora hai gli strumenti per lavorare con queste strutture di dati complesse.

Come con ogni concetto di programmazione, la pratica è la chiave. Prova a creare i tuoi dizionari annidati, magari un catalogo digitale di una biblioteca o un libro di ricette. Più gioca con queste strutture, più ti sentirai a tuo agio.

Ricorda, nel mondo della programmazione, gli errori sono solo opportunità per imparare. Quindi non aver paura di sperimentare e fare errori - è così che noi tutti cresciamo come coder. Continua a programmare, a imparare e, soprattutto, a divertirti con Python!

Credits: Image by storyset