Razumijevanje rječnika Pythona

U ovom ćemo uputstvu naučiti o razumijevanju rječnika Python i kako ga koristiti uz pomoć primjera.

Rječnici su tipovi podataka u Pythonu koji nam omogućuju pohranu podataka u par ključ / vrijednost . Na primjer:

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

Da biste saznali više o njima, posjetite: Python Dictionary

Što je razumijevanje rječnika u Pythonu?

Razumijevanje rječnika elegantan je i sažet način stvaranja rječnika.

Primjer 1: Razumijevanje rječnika

Razmotrite sljedeći kod:

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

Ajmo sada stvoriti rječnik u gore navedenom programu koristeći razumijevanje rječnika.

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

Izlaz oba programa bit će jednak.

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

U oba programa stvorili smo rječnik square_dicts parom ključ / vrijednost broja kvadrat .

Međutim, korištenje razumijevanja rječnika omogućilo nam je stvaranje rječnika u jednom retku .

Korištenje razumijevanja rječnika

Iz gornjeg primjera vidimo da bi razumijevanje rječnika trebalo biti napisano po određenom obrascu.

Minimalna sintaksa za razumijevanje rječnika je:

 rječnik = (ključ: vrijednost za vars u iterable-u) 

Usporedimo ovu sintaksu s razumijevanjem rječnika iz gornjeg primjera.

Pogledajmo sada kako možemo koristiti razumijevanje rječnika koristeći podatke iz drugog rječnika.

Primjer 3: Kako se koristi razumijevanje rječnika

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

Izlaz

 ('mlijeko': 0,7752, 'kava': 1,9, 'kruh': 1,9) 

Ovdje možemo vidjeti da smo pronašli cijene predmeta u dolarima i pretvorili ih u funte. Korištenje razumijevanja rječnika čini ovaj zadatak mnogo jednostavnijim i kraćim.

Kondicionali u razumijevanju rječnika

Razumijevanje rječnika možemo dodatno prilagoditi dodavanjem uvjeta. Pogledajmo primjer.

Primjer 4: Ako je uvjetno razumijevanje rječnika

 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) 

Izlaz

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

Kao što vidimo, dodane su samo stavke s jednakom vrijednošću, zbog ifklauzule u razumijevanju rječnika.

Primjer 5: Višestruko, ako je uvjetno razumijevanje rječnika

 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) 

Izlaz

 ('John': 33) 

U ovom su slučaju u novi rječnik dodane samo stavke neparne vrijednosti manje od 40.

To je zbog više ifrečenica u razumijevanju rječnika. Oni su ekvivalentni andradu gdje oba uvjeta moraju biti istinita.

Primjer 6: ako-inače uvjetno razumijevanje rječnika

 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) 

Izlaz

 ('jack': 'mladi', 'michael': 'stari', 'guideo': 'stari', 'john': 'mlad' 

U ovom se slučaju novi rječnik stvara razumijevanjem rječnika.

Predmeti u vrijednosti od 40 ili više imaju vrijednost "stari", dok drugi imaju vrijednost "mladi".

Razumijevanje ugniježđenog rječnika

Razumijevanje rječnika možemo dodati samim rječnicima kako bismo stvorili ugniježđene rječnike. Pogledajmo primjer.

Primjer 7: Ugnježđeni rječnik s dva razumijevanja rječnika

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

Izlaz

 (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

Iako su razumijevanja rječnika izvrsna za pisanje elegantnog koda koji se lako čita, oni nisu uvijek pravi izbor.

Moramo biti oprezni dok ih koristimo kao:

  • Ponekad mogu usporiti rad koda i potrošiti više memorije.
  • Oni također mogu smanjiti čitljivost koda.

Ne smijemo pokušati uklopiti tešku logiku ili velik broj razumijevanja rječnika u njih samo radi toga da kod bude jednoredan. U tim je slučajevima bolje odabrati druge alternative poput petlji.

Zanimljivi članci...