Pythoni sõnaraamatu mõistmine

Selles õppetükis õpime näidete abil Pythoni sõnastiku mõistmist ja selle kasutamist.

Sõnastikud on Pythonis andmetüübid, mis võimaldavad meil andmeid salvestada võtme / väärtuse paaris . Näiteks:

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

Nende kohta lisateabe saamiseks külastage: Pythoni sõnaraamat

Mis on Pythoni sõnastiku mõistmine?

Sõnastiku mõistmine on elegantne ja kokkuvõtlik viis sõnastike loomiseks.

Näide 1: sõnastiku mõistmine

Mõelge järgmisele koodile:

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

Nüüd loome sõnastik ülaltoodud programmis, kasutades sõnastiku mõistmist.

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

Mõlema programmi väljund on sama.

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

Mõlemal programmid, oleme loonud sõnastik square_dictkoos number-ruut võti / väärtus paari .

Sõnastiku mõistmise kasutamine võimaldas meil siiski luua sõnastiku ühes reas .

Sõnastiku mõistmise kasutamine

Ülaltoodud näite põhjal näeme, et sõnastiku mõistmine peaks olema kirjutatud kindla mustriga.

Minimaalne sõnastiku mõistmise süntaks on:

 sõnastik = (võti: varside väärtus iterable'is) 

Võrdleme seda süntaksi ülaltoodud näite sõnastiku mõistmisega.

Vaatame nüüd, kuidas saame sõnastikust aru saada, kasutades teise sõnaraamatu andmeid.

Näide 3: Kuidas kasutada sõnastiku mõistmist

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

Väljund

 (piim: 0,7752, kohv: 1,9, leib: 1,9) 

Siin näeme, et leidsime üksuste hinnad dollarites ja teisendasime need naeladeks. Sõnastiku mõistmise kasutamine muudab selle ülesande palju lihtsamaks ja lühemaks.

Tingimused sõnaraamatu mõistmises

Sõnastiku mõistmist saame veelgi kohandada, lisades sellele tingimused. Vaatame ühte näidet.

Näide 4: tingimusliku sõnaraamatu mõistmine

 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) 

Väljund

 ("jack": 38, "Michael": 48) 

Nagu näeme, ifon sõnastiku mõistmise klausli tõttu lisatud ainult ühtlase väärtusega üksused .

Näide 5: mitmekordne tingimusliku sõnaraamatu mõistmine

 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) 

Väljund

 ('john': 33) 

Sel juhul on uude sõnastikku lisatud ainult üksused, mille paaritu väärtus on väiksem kui 40.

Selle põhjuseks ifon sõnastiku mõistmise mitmekordne lause. Need on samaväärsed andtoimimisega, kui mõlemad tingimused peavad olema tõesed.

Näide 6: if-else tingimusliku sõnaraamatu mõistmine

 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) 

Väljund

 ('jack': 'noor', 'michael': 'vana', 'guido': 'vana', 'john': 'noor') 

Sellisel juhul luuakse sõnastiku mõistmise kaudu uus sõnastik.

Kaupade väärtusega 40 või rohkem on väärtus „vana”, teistel aga „noor”.

Pesastatud sõnastiku mõistmine

Pesastatud sõnastike loomiseks võime sõnastiku mõistetesse lisada ka sõnastiku mõistmise. Vaatame ühte näidet.

Näide 7: Pesastatud sõnaraamat kahe sõnastiku mõistmisega

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

Väljund

 (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

Ehkki sõnastiku mõistmine sobib suurepäraselt hõlpsasti loetava elegantse koodi kirjutamiseks, pole see alati õige valik.

Peame olema ettevaatlikud, kui kasutame neid järgmiselt:

  • Nad võivad mõnikord muuta koodi aeglasemaks ja tarbida rohkem mälu.
  • Need võivad vähendada ka koodi loetavust.

Me ei tohi proovida nende sisse mahutada keerulist loogikat või suurt hulka sõnastiku mõistmist ainult selleks, et kood oleks üksjooneline. Nendel juhtudel on parem valida muud alternatiivid, näiteks silmused.

Huvitavad Artiklid...