Python vārdnīcas izpratne

Šajā apmācībā mēs uzzināsim par Python vārdnīcas izpratni un to, kā to izmantot, izmantojot piemērus.

Vārdnīcas ir Python datu tipi, kas ļauj mums saglabāt datus atslēgu / vērtību pārī . Piemēram:

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

Lai uzzinātu vairāk par viņiem, apmeklējiet: Python Dictionary

Kas ir vārdnīcas izpratne Python?

Vārdnīcas izpratne ir elegants un kodolīgs veids, kā izveidot vārdnīcas.

1. piemērs: Vārdnīcas izpratne

Apsveriet šādu kodu:

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

Tagad izveidosim vārdnīcu iepriekšminētajā programmā, izmantojot vārdnīcas izpratni.

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

Abu programmu iznākums būs vienāds.

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

Abās programmās mēs esam izveidojuši vārdnīcu square_dictar ciparu-kvadrātu taustiņu / vērtību pāri .

Tomēr vārdnīcas izpratnes izmantošana ļāva mums izveidot vārdnīcu vienā rindā .

Izmantojot vārdnīcas izpratni

No iepriekš minētā piemēra mēs varam redzēt, ka vārdnīcas izpratnei jābūt rakstītai pēc noteikta parauga.

Minimālā vārdnīcas izpratnes sintakse ir šāda:

 vārdnīca = (atslēga: iterējamo variantu vērtība) 

Salīdzināsim šo sintaksi ar vārdnīcas izpratni no iepriekš minētā piemēra.

Apskatīsim, kā mēs varam izmantot vārdnīcas izpratni, izmantojot datus no citas vārdnīcas.

3. piemērs: Kā lietot vārdnīcas izpratni

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

Rezultāts

 (“piens”: 0,7752, “kafija”: 1,9, “maize”: 1,9) 

Šeit mēs varam redzēt, ka mēs ieguva preču cenas dolāros un konvertējām tās mārciņās. Vārdnīcas izpratnes izmantošana padara šo uzdevumu daudz vienkāršāku un īsāku.

Nosacījumi vārdnīcas izpratnē

Mēs varam vēl vairāk pielāgot vārdnīcas izpratni, pievienojot tai nosacījumus. Apskatīsim piemēru.

4. piemērs: Ja nosacīta vārdnīcas izpratne

 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) 

Rezultāts

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

Kā redzam, ifvārdnīcas izpratnes klauzulas dēļ ir pievienoti tikai vienumi ar vienmērīgu vērtību .

5. piemērs: Vairāku vārdnīcu izpratne, ja tā ir nosacīta

 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) 

Rezultāts

 ('Džons': 33) 

Šajā gadījumā jaunajai vārdnīcai ir pievienoti tikai tie vienumi, kuru nepāra vērtība ir mazāka par 40.

Tas ir tāpēc, ifka vārdnīcas izpratnē ir daudz klauzulu. Tie ir līdzvērtīgi anddarbībai, ja abiem nosacījumiem ir jābūt patiesiem.

6. piemērs: nosacījuma vārdnīcas izpratne

 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) 

Rezultāts

 ('jack': 'jauns', 'Michael': 'vecs', 'guido': 'vecs', 'john': 'jauns' 

Šajā gadījumā, izmantojot vārdnīcas izpratni, tiek izveidota jauna vārdnīca.

Vienumiem, kuru vērtība ir 40 vai vairāk, vērtība ir “vecs”, bet citiem - “jauns”.

Ievietota vārdnīcas izpratne

Mēs varam pievienot vārdnīcu izpratni pašām vārdnīcu izpratnēm, lai izveidotu ligzdotas vārdnīcas. Apskatīsim piemēru.

7. piemērs: ligzdota vārdnīca ar divām vārdnīcas izpratnēm

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

Rezultāts

 (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

Kaut arī vārdnīcu izpratne ir lieliska, lai rakstītu elegantu kodu, kuru ir viegli lasīt, tas ne vienmēr ir pareizā izvēle.

Mums jābūt uzmanīgiem, tos lietojot kā:

  • Dažreiz viņi var padarīt kodu palēnāku un patērēt vairāk atmiņas.
  • Tie var arī samazināt koda lasāmību.

Mēs nedrīkstam mēģināt tajos iekļaut sarežģītu loģiku vai lielu skaitu vārdnīcu, tikai tāpēc, lai kods būtu vienrindīgs. Šādos gadījumos labāk izvēlēties citas alternatīvas, piemēram, cilpas.

Interesanti raksti...