„Python“ žodyno supratimas

Šioje pamokoje su pavyzdžių pagalba sužinosime apie „Python“ žodyno supratimą ir kaip jį naudoti.

Žodynai yra „Python“ duomenų tipai, kurie leidžia mums saugoti duomenis raktų / reikšmių poroje . Pavyzdžiui:

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

Norėdami sužinoti daugiau apie juos, apsilankykite: „Python Dictionary“

Kas yra žodyno supratimas „Python“?

Žodyno supratimas yra elegantiškas ir glaustas žodynų kūrimo būdas.

1 pavyzdys: žodyno supratimas

Apsvarstykite šį kodą:

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

Dabar sukurkime žodyną aukščiau pateiktoje programoje, naudodamiesi žodyno supratimu.

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

Abiejų programų išvestis bus ta pati.

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

Abiejose programose sukūrėme žodyną square_dictsu skaičiaus-kvadrato klavišo / vertės pora .

Tačiau žodžio supratimo naudojimas leido sukurti žodyną vienoje eilutėje .

Žodyno supratimo naudojimas

Iš aukščiau pateikto pavyzdžio matome, kad žodyno supratimas turėtų būti parašytas pagal tam tikrą modelį.

Minimali žodyno supratimo sintaksė yra:

 žodynas = (raktas: iterable vars vertė) 

Palyginkime šią sintaksę su žodyno supratimu iš aukščiau pateikto pavyzdžio.

Dabar pažiūrėkime, kaip mes galime naudoti žodyno supratimą naudodami kito žodyno duomenis.

3 pavyzdys: Kaip naudotis žodyno supratimu

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

Rezultatas

 („pienas“: 0,7752, „kava“: 1,9, „duona“: 1,9) 

Čia matome, kad daiktų kainas gaudavome doleriais ir perskaičiavome į svarus. Naudojant žodyno supratimą, ši užduotis tampa daug paprastesnė ir trumpesnė.

Sąlyginiai žodyno supratime

Mes galime toliau pritaikyti žodyno supratimą, įtraukdami į jį sąlygas. Pažvelkime į pavyzdį.

4 pavyzdys: jei sąlyginis žodyno supratimas

 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) 

Rezultatas

 („jack“: 38, „Michael“: 48) 

Kaip matome, ifdėl žodyno supratimo punkto buvo pridėta tik tolygios vertės elementų .

5 pavyzdys: daugybinis, jei sąlyginis žodyno supratimas

 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) 

Rezultatas

 ('john': 33) 

Šiuo atveju į naują žodyną buvo įtraukti tik tie elementai, kurių nelyginė vertė buvo mažesnė nei 40.

Taip yra dėl daugybės ifžodyno supratimo sakinių. Jie prilygsta andeksploatavimui, kai abi sąlygos turi atitikti.

6 pavyzdys: Sąlyginio žodyno supratimas

 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) 

Rezultatas

 („jack“: „jaunas“, „michael“: „senas“, „guido“: „senas“, „john“: „jaunas“) 

Tokiu atveju suprantant žodyną sukuriamas naujas žodynas.

Prekių, kurių vertė yra 40 ar daugiau, vertė yra „sena“, o kitų - „jauna“.

Įdėtas žodyno supratimas

Žodynų supratimą galime pridėti prie pačių žodynų supratimų, kad sukurtume įdėtus žodynus. Pažvelkime į pavyzdį.

7 pavyzdys: įdėtas žodynas su dviem žodyno supratimais

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

Rezultatas

 (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

Nors žodynų supratimas puikiai tinka rašyti elegantišką ir lengvai skaitomą kodą, jie ne visada yra teisingas pasirinkimas.

Turime būti atsargūs juos naudodami kaip:

  • Kartais jie gali priversti kodą veikti lėčiau ir sunaudoti daugiau atminties.
  • Jie taip pat gali sumažinti kodo įskaitomumą.

Mes neturime stengtis pritaikyti sudėtingos logikos ar daugybės žodynų supratimo vien dėl to, kad kodas būtų vienas. Tokiais atvejais geriau pasirinkti kitas alternatyvas, tokias kaip kilpos.

Įdomios straipsniai...