Razumevanje slovarja Python

V tej vadnici bomo spoznali razumevanje slovarja Python in kako ga uporabiti s pomočjo primerov.

Slovarji so podatkovni tipi v Pythonu, ki nam omogočajo shranjevanje podatkov v paru ključ / vrednost . Na primer:

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

Če želite izvedeti več o njih, obiščite: Python Dictionary

Kaj je razumevanje slovarja v Pythonu?

Razumevanje slovarja je eleganten in jedrnat način za ustvarjanje slovarjev.

Primer 1: Razumevanje slovarja

Upoštevajte naslednjo kodo:

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

Zdaj pa ustvarimo slovar v zgornjem programu z uporabo razumevanja slovarja.

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

Izhod obeh programov bo enak.

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

V obeh programih smo ustvarili slovar square_dicts parom ključ / vrednost števil-kvadrat .

Vendar pa smo z razumevanjem slovarja omogočili, da smo ustvarili slovar v eni vrstici .

Uporaba razumevanja slovarja

Iz zgornjega primera vidimo, da je treba razumevanje slovarja pisati po določenem vzorcu.

Minimalna sintaksa za razumevanje slovarja je:

 slovar = (ključ: vrednost za vars v iterable) 

Primerjajmo to sintakso z razumevanjem slovarja iz zgornjega primera.

Zdaj pa poglejmo, kako lahko uporabimo razumevanje slovarja z uporabo podatkov iz drugega slovarja.

Primer 3: Kako uporabiti razumevanje slovarja

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

Izhod

 („mleko“: 0,7752, „kava“: 1,9, „kruh“: 1,9) 

Tu lahko vidimo, da smo cene artiklov poiskali v dolarjih in jih pretvorili v funte. Z uporabo razumevanja slovarja je ta naloga veliko enostavnejša in krajša.

Pogojnosti pri razumevanju slovarja

Razumevanje slovarja lahko dodatno prilagodimo tako, da mu dodamo pogoje. Oglejmo si primer.

Primer 4: Če pogojno razumevanje slovarja

 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) 

Izhod

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

Kot lahko vidimo, so bili zaradi ifklavzule v razumevanju slovarja dodani le predmeti s celo vrednostjo .

Primer 5: Večkratno, pogojno razumevanje slovarja

 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) 

Izhod

 ('John': 33) 

V tem primeru so bili v nov slovar dodani le predmeti z liho vrednostjo manj kot 40.

To je zaradi več ifstavkov v razumevanju slovarja. So enakovredni anddelovanju, kjer morata biti oba pogoja resnična.

Primer 6: Pogojno razumevanje slovarja 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) 

Izhod

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

V tem primeru se nov slovar ustvari z razumevanjem slovarja.

Elementi z vrednostjo 40 ali več imajo vrednost "stari", drugi pa vrednost "mladi".

Vgnezdeno razumevanje slovarja

Razumevanje slovarja lahko sami dodamo v slovarje, da ustvarimo ugnezdene slovarje. Oglejmo si primer.

7. primer: ugnezdeni slovar z dvema razumevanjem slovarja

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

Izhod

 (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

Čeprav so razumevanja slovarjev odlična za pisanje elegantne, lahko berljive kode, niso vedno prava izbira.

Previdni moramo biti, ko jih uporabljamo kot:

  • Včasih lahko koda počasneje deluje in porabi več pomnilnika.
  • Prav tako lahko zmanjšajo berljivost kode.

V njih ne smemo poskušati umestiti težke logike ali večjega števila razumevanja slovarja samo zato, da bi bila koda enoredna. V teh primerih je bolje izbrati druge možnosti, kot so zanke.

Zanimive Članki...