Comprensione del dizionario Python

In questo tutorial, impareremo la comprensione del dizionario Python e come usarlo con l'aiuto di esempi.

I dizionari sono tipi di dati in Python che ci consentono di memorizzare i dati in coppie chiave / valore . Per esempio:

 my_dict = (1: 'apple', 2: 'ball') 

Per saperne di più su di loro visita: Dizionario Python

Che cos'è la comprensione del dizionario in Python?

La comprensione del dizionario è un modo elegante e conciso per creare dizionari.

Esempio 1: comprensione del dizionario

Considera il codice seguente:

 square_dict = dict() for num in range(1, 11): square_dict(num) = num*num print(square_dict) 

Ora creiamo il dizionario nel programma precedente usando la comprensione del dizionario.

 # dictionary comprehension example square_dict = (num: num*num for num in range(1, 11)) print(square_dict) 

L'output di entrambi i programmi sarà lo stesso.

 (1: 1, 2: 4, 3: 9, 4:16, 5:25, 6:36, 7:49, 8:64, 9:81, 10: 100)

In entrambi i programmi, abbiamo creato un dizionario square_dictcon coppia chiave / valore numero-quadrato .

Tuttavia, l'utilizzo della comprensione del dizionario ci ha permesso di creare un dizionario in una singola riga .

Utilizzo della comprensione del dizionario

Dall'esempio sopra, possiamo vedere che la comprensione del dizionario dovrebbe essere scritta in uno schema specifico.

La sintassi minima per la comprensione del dizionario è:

 dizionario = (chiave: valore per vars in iterabile) 

Confrontiamo questa sintassi con la comprensione del dizionario dell'esempio precedente.

Ora, vediamo come possiamo usare la comprensione del dizionario usando i dati di un altro dizionario.

Esempio 3: come utilizzare la comprensione del dizionario

 #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) 

Produzione

 ('latte': 0,7752, 'caffè': 1,9, 'pane': 1,9) 

Qui possiamo vedere che abbiamo recuperato i prezzi degli articoli in dollari e li abbiamo convertiti in sterline. L'uso della comprensione del dizionario rende questo compito molto più semplice e breve.

Conditionals nel dizionario Comprehension

Possiamo personalizzare ulteriormente la comprensione del dizionario aggiungendovi condizioni. Diamo un'occhiata a un esempio.

Esempio 4: If Conditional Dictionary Comprehension

 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) 

Produzione

 ('jack': 38, 'michael': 48) 

Come possiamo vedere, sono stati aggiunti solo gli elementi con valore pari, a causa della ifclausola nella comprensione del dizionario.

Esempio 5: Multiple if Conditional Dictionary Comprehension

 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) 

Produzione

 ('giovanni': 33) 

In questo caso, solo gli elementi con un valore dispari inferiore a 40 sono stati aggiunti al nuovo dizionario.

È a causa delle molteplici ifclausole nella comprensione del dizionario. Sono equivalenti al andfunzionamento in cui entrambe le condizioni devono essere vere.

Esempio 6: comprensione del dizionario condizionale if-else

 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) 

Produzione

 ('jack': 'young', 'michael': 'old', 'guido': 'old', 'john': 'young') 

In questo caso, viene creato un nuovo dizionario tramite la comprensione del dizionario.

Gli elementi con un valore di 40 o più hanno il valore di "vecchio" mentre altri hanno il valore di "giovane".

Comprensione del dizionario annidato

Possiamo aggiungere le comprensioni del dizionario alle stesse comprensioni del dizionario per creare dizionari annidati. Diamo un'occhiata a un esempio.

Esempio 7: dizionario annidato con due comprensioni di dizionario

 dictionary = ( k1: (k2: k1 * k2 for k2 in range(1, 6)) for k1 in range(2, 5) ) print(dictionary) 

Produzione

 (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)) 

As you can see, we have constructed a multiplication table in a nested dictionary, for numbers from 2 to 4.

Whenever nested dictionary comprehension is used, Python first starts from the outer loop and then goes to the inner one.

So, the above code would be equivalent to:

 dictionary = dict() for k1 in range(11, 16): dictionary(k1) = (k2: k1*k2 for k2 in range(1, 6)) print(dictionary) 

It can further be unfolded:

 dictionary = dict() for k1 in range(11, 16): dictionary(k1) = dict() for k2 in range(1, 6): dictionary(k1)(k2) = k1*k2 print(dictionary) 

All these three programs give us the same output.

Advantages of Using Dictionary Comprehension

As we can see, dictionary comprehension shortens the process of dictionary initialization by a lot. It makes the code more pythonic.

Using dictionary comprehension in our code can shorten the lines of code while keeping the logic intact.

Warnings on Using Dictionary Comprehension

Anche se la comprensione del dizionario è ottima per scrivere codice elegante e facile da leggere, non sono sempre la scelta giusta.

Dobbiamo stare attenti mentre li usiamo come:

  • A volte possono rallentare l'esecuzione del codice e consumare più memoria.
  • Possono anche diminuire la leggibilità del codice.

Non dobbiamo cercare di inserire una logica difficile o un gran numero di comprensione del dizionario al loro interno solo per il gusto di rendere il codice univoco. In questi casi, è meglio scegliere altre alternative come i loop.

Articoli interessanti...