Python Dictionary Comprehension

În acest tutorial, vom învăța despre înțelegerea dicționarului Python și cum să o folosim cu ajutorul exemplelor.

Dicționarele sunt tipuri de date în Python care ne permit să stocăm date în pereche cheie / valoare . De exemplu:

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

Pentru a afla mai multe despre acestea, vizitați: Dicționarul Python

Ce este Înțelegerea dicționarului în Python?

Înțelegerea dicționarului este un mod elegant și concis de a crea dicționare.

Exemplul 1: Înțelegerea dicționarului

Luați în considerare următorul cod:

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

Acum, să creăm dicționarul în programul de mai sus folosind înțelegerea dicționarului.

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

Rezultatul ambelor programe va fi același.

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

În ambele programe, am creat un dicționar square_dictcu pereche cheie / valoare număr-pătrat .

Cu toate acestea, utilizarea înțelegerii dicționarului ne-a permis să creăm un dicționar într-o singură linie .

Folosind Înțelegerea dicționarului

Din exemplul de mai sus, putem vedea că înțelegerea dicționarului ar trebui să fie scrisă într-un model specific.

Sintaxa minimă pentru înțelegerea dicționarului este:

 dicționar = (cheie: valoare pentru var în iterabil) 

Să comparăm această sintaxă cu înțelegerea dicționarului din exemplul de mai sus.

Acum, să vedem cum putem folosi înțelegerea dicționarului folosind date dintr-un alt dicționar.

Exemplul 3: Cum se utilizează Înțelegerea dicționarului

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

Ieșire

 („lapte”: 0,7752, „cafea”: 1,9, „pâine”: 1,9) 

Aici putem vedea că am recuperat prețurile articolelor în dolari și le-am convertit în lire sterline. Folosirea înțelegerii dicționarului face această sarcină mult mai simplă și mai scurtă.

Conditionals in Dictionary Comprehension

Putem personaliza în continuare înțelegerea dicționarului adăugându-i condiții. Să vedem un exemplu.

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

Ieșire

 („jack”: 38, „michael”: 48) 

După cum putem vedea, au fost adăugate numai articolele cu valoare uniformă, din cauza ifclauzei din înțelegerea dicționarului.

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

Ieșire

 („John”: 33) 

În acest caz, numai articolele cu o valoare ciudată mai mică de 40 au fost adăugate la noul dicționar.

Se datorează ifclauzelor multiple din înțelegerea dicționarului. Sunt echivalente cu andfuncționarea în care ambele condiții trebuie să fie adevărate.

Exemplul 6: Înțelegerea dicționarului condițional 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) 

Ieșire

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

În acest caz, se creează un dicționar nou prin înțelegerea dicționarului.

Elementele cu o valoare de 40 sau mai mult au valoarea „vechi”, în timp ce altele au valoarea „tânăr”.

Nested Dictionary Comprehension

Putem adăuga înțelegeri de dicționar la înțelegerile de dicționar pentru a crea dicționare imbricate. Să vedem un exemplu.

Exemplul 7: Dicționar imbricat cu două înțelegeri de dicționar

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

Ieșire

 (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

Chiar dacă înțelegerea dicționarului este excelentă pentru scrierea unui cod elegant, ușor de citit, nu sunt întotdeauna alegerea potrivită.

Trebuie să fim atenți când îi folosim ca:

  • Uneori pot face codul să ruleze mai lent și să consume mai multă memorie.
  • De asemenea, pot reduce lizibilitatea codului.

Nu trebuie să încercăm să potrivim o logică dificilă sau un număr mare de înțelegere a dicționarului în interiorul lor, doar pentru a face codul să fie aliniat. În aceste cazuri, este mai bine să alegeți alte alternative, cum ar fi buclele.

Articole interesante...