English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questa guida, impareremo la comprensione dei dizionari in Python e come utilizzarla con l'aiuto di esempi.
Il dizionario è un tipo di dati in Python che ci permette di memorizzare i dati inIn un chiave/valore pair. Ad esempio:
my_dict = {1: 'apple', 2: 'ball'}
Per ottenere ulteriori informazioni su di loro, visitare:Dizionario Python
La comprensione dei dizionari è un metodo elegante e semplice per creare dizionari.
Consideriamo il seguente codice:
square_dict = dict() for num in range(1, 11): square_dict[num] = num*num print(square_dict)
Ora, utilizziamo la funzione di comprensione dei dizionari per creare il dizionario nei programmi precedenti.
# Esempio di comprensione dei dizionari square_dict = {num: num*num for num in range(1, 11)} print(square_dict)
Le uscite dei due programmi saranno le stesse.
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}
In questi due programmi, abbiamo creato square_dict conPari chiave/valore numericiil nostro dizionario.
Ma l'uso della comprensione dei dizionari ci permette diIn una rigaCreareDizionario.
Dal esempio sopra, possiamo vedere che la comprensione dei dizionari dovrebbe essere scritta in un pattern specifico.
La sintassi minima della comprensione dei dizionari è:
dictionary = {key: value for vars in iterable}
Confrontiamo questa sintassi con l'esempio di comprensione dei dizionari nel caso precedente.
Ora, vediamo come utilizzare i dati di un altro dizionario per utilizzare la comprensione dei dizionari.
#item price in dollars old_price = {'milk': 1.02, 'coffee': 2.5, 'bread': 2.5} dollar_to_pound = 0.76 new_price = {item: value*dollar_to_pound for (item, value) in old_price.items()} print(new_price)
Risultato di output
{'milk': 0.7752, 'coffee': 1.9, 'bread': 1.9}
In questo caso, possiamo vedere che stiamo cercando i prezzi degli articoli in dollari e li convertiamo in sterline. L'uso della comprensione del dizionario rende questa attività più semplice e breve.
Possiamo ulteriormente personalizzare la comprensione del dizionario aggiungendo condizioni. Vediamo un esempio.
original_dict = {'jack': 38, 'michael': 48, 'guido': 57, 'john': 33} even_dict = {k: v for (k, v) in original_dict.items() if v % 2 == 0} print(even_dict)
Risultato di output
{'jack': 38, 'michael': 48}
Possiamo vedere che, a causa delle clausole nella comprensione del dizionario if, sono stati aggiunti solo gli articoli con valori pari.
original_dict = {'jack': 38, 'michael': 48, 'guido': 57, 'john': 33} new_dict = {k: v for (k, v) in original_dict.items() if v % 2 != 0 if v < 40} print(new_dict)
Risultato di output
{'john': 33}
In questo caso, sono stati aggiunti al nuovo dizionario solo gli articoli con valori dispari inferiori a 40.
Questo è perché ci sono più clausole nella comprensione del dizionario if. Sono equivalenti a un'operazione and che deve soddisfare entrambe le condizioni simultaneamente.
original_dict = {'jack': 38, 'michael': 48, 'guido': 57, 'john': 33} new_dict_1 = {k: ('old' if v > 40 else 'young') for (k, v) in original_dict.items() print(new_dict_1)
Risultato di output
{'jack': 'young', 'michael': 'old', 'guido': 'old', 'john': 'young'}
In questo caso, verrà creato un nuovo dizionario tramite comprensione del dizionario secondario.
Il valore degli articoli con un valore maggiore o uguale a 40 è "old", mentre per gli altri articoli è "young".
Possiamo considerare l'aggiunta di comprensione del dizionario all'interno della comprensione del dizionario per creare dizionari annidati. Vediamo un esempio.
dictionary = { k1: {k2: k1 * k2 for k2 in range(1, 6)} for k1 in range(2, 5) } print(dictionary)
Risultato di output
{2: {1: 2, 2: 4, 3: 6, 4: 8, 5: 10}, 3: {1: 3, 2: 6, 3: 9, 4: 12, 5: 15}, 4: {1: 4, 2: 8, 3: 12, 4: 16, 5: 20}}
Come puoi vedere, abbiamo costruito una tabella di moltiplicazione annidata per i numeri da 2 a 4.
Ogni volta che si utilizza la comprensione dizionaria annidata, Python inizia sempre dal ciclo esterno e poi entra nel ciclo interno.
Quindi, il codice sopra è equivalente a:
dictionary = dict() for k1 in range(11, 16): dictionary[k1] = {k2: k1*k2 for k2 in range(1, 6)} print(dictionary)
Può essere ulteriormente espanso:
dictionary = dict() for k1 in range(11, 16): dictionary[k1] = dict() for k2 in range(1, 6): dictionary[k1][k2] = k1*k2 print(dictionary)
Questi tre programmi ci danno la stessa uscita.
Come abbiamo visto, la comprensione dizionaria riduce notevolmente il processo di inizializzazione del dizionario. Fa sì che il codice sia più di stile pythonico.
L'uso della comprensione dizionaria nel nostro codice può ridurre il numero di righe di codice mantenendo la completezza della logica.
Nonostante la comprensione dizionaria sia molto utile per scrivere codice elegante e facile da leggere, non è sempre la scelta giusta.
Usale come:
A volte può rallentare l'esecuzione del codice e utilizzare più memoria.
Questo ridurrà anche la leggibilità del codice.
Non possiamo assolutamente cercare di rendere il codice su una riga unica aggiungendo logica difficile o una grande comprensione dizionaria. In questi casi, è meglio scegliere altri metodi di sostituzione, ad esempio i cicli.