Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Comprensioni di Dizionari | Comprensioni di Liste e Dizionari
Tutorial sui Cicli in Python
Sezione 4. Capitolo 3
single

single

Comprensioni di Dizionari

Scorri per mostrare il menu

Le comprensioni di dizionario offrono un modo conciso per creare dizionari in Python, simile alle comprensioni di lista. Consentono di trasformare i dati in coppie chiave-valore in una sola riga di codice.

Fondamentalmente, una comprensione di dizionario di base permette di costruire un nuovo dizionario applicando un'espressione a ciascuna coppia chiave-valore in una variabile iterabile.

{key_expression: value_expression for item in iterable}
  • key_expression: definisce la chiave per ogni coppia chiave-valore;
  • value_expression: definisce il valore corrispondente alla chiave;
  • iterable: la sorgente degli elementi da elaborare (ad esempio, una lista, un range o un altro iterabile).
Note
Nota

A differenza delle liste, i dizionari richiedono sia una chiave che un valore, separati da due punti (:) e utilizzano {} invece di [].

12345678910111213141516
travel_wishlist = [ ['Paris', 2000], ['Tokyo', 3000], ['New York', 2500], ['Kyoto', 1500], ['Sydney', 4000] ] # Initialize an empty dictionary travel_budget = {} # Populate the dictionary using a for loop for destination, cost in travel_wishlist: travel_budget[destination] = cost print(travel_budget)

Questo codice itera attraverso la lista travel_wishlist, dove ogni sotto-lista contiene una destinazione e il relativo budget. Il ciclo for assegna la destinazione come chiave e il budget come valore nel dizionario travel_budget.

123456789101112
travel_wishlist = [ ['Paris', 2000], ['Tokyo', 3000], ['New York', 2500], ['Kyoto', 1500], ['Sydney', 4000] ] # Create the dictionary using dictionary comprehension travel_budget = {destination: cost for destination, cost in travel_wishlist} print(travel_budget)

Questo esempio utilizza una comprensione del dizionario per ottenere lo stesso risultato dell'esempio precedente. Ogni destinazione diventa una chiave e il relativo costo diventa il valore nel dizionario travel_budget, tutto in un'unica riga.

Gestione di ValueError durante l'unpacking di elementi con più di due valori

Quando si utilizzano le dictionary comprehensions, spesso si effettua l'unpacking degli elementi di un iterabile in variabili per chiavi e valori. Se ogni elemento dell'iterabile contiene più di due elementi (ad esempio una lista di [city, country, budget]), tentare di effettuare l'unpacking in sole due variabili causerà un ValueError.

Ad esempio, se si scrive:

{city: country for city, country in travel_wishlist}

e travel_wishlist contiene sotto-liste con tre elementi, Python genererà questo errore:

ValueError: too many values to unpack (expected 2)

Perché accade questo?

  • Python si aspetta di effettuare l'unpacking di esattamente due valori (per city e country), ma ogni sotto-lista ne ha tre.
  • Questa discrepanza porta Python a generare un ValueError, indicando chiaramente che vengono forniti più valori del previsto.

Come si può gestire questa situazione?

  • Effettuare l'unpacking di tutti gli elementi, utilizzando solo quelli necessari:

for city, country, budget in travel_wishlist — assegnare ogni valore a una variabile.

  • Ignorare i valori non utilizzati con un underscore:

for city, country, _ in travel_wishlist — l'underscore _ è una convenzione comune per le variabili non utilizzate.

  • Utilizzare lo slicing per selezionare gli elementi:

for city, country in [item[:2] for item in travel_wishlist] — effettuare lo slicing di ogni sotto-lista ai primi due elementi prima dell'unpacking.

Abbinando il numero di variabili al numero di elementi in ciascun elemento, oppure ignorando i dati non necessari, si evitano errori di unpacking e si mantengono le dictionary comprehensions chiare e leggibili.

1234567891011121314151617181920
# Example data: each tuple has three elements (city, country, budget) travel_wishlist = [ ("Paris", "France", 2000), ("Tokyo", "Japan", 3000), ("New York", "USA", 2500) ] # Attempting to unpack only two variables (incorrect) try: city_to_country = {city: country for city, country in travel_wishlist} except ValueError as e: print("Error:", e) # Correct: unpack all elements, using underscore for unused value city_to_country = {city: country for city, country, _ in travel_wishlist} print("Handled with underscore:", city_to_country) # Correct: use slicing to select only needed elements city_to_country = {item[0]: item[1] for item in travel_wishlist} print("Handled with slicing:", city_to_country)
Compito

Scorri per iniziare a programmare

Un viaggiatore desidera organizzare la propria travel_wishlist associando ogni nome di città al rispettivo paese. Per ottenere questo risultato in modo efficiente, è necessario trasformare i dati in un dizionario.

  • Estrarre i nomi delle città e i relativi paesi da travel_wishlist.
  • Salvare il dizionario risultante in city_to_country.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 3
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

some-alt