Python Dictionary Comprehension

I denne vejledning lærer vi Python-ordbogens forståelse, og hvordan man bruger den ved hjælp af eksempler.

Ordbøger er datatyper i Python, som giver os mulighed for at gemme data i nøgle / værdipar . For eksempel:

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

For at lære mere om dem, besøg: Python Dictionary

Hvad er ordbogsforståelse i Python?

Ordbogsforståelse er en elegant og kortfattet måde at skabe ordbøger på.

Eksempel 1: Ordbogsforståelse

Overvej følgende kode:

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

Lad os nu oprette ordbogen i ovenstående program ved hjælp af forståelse af ordbogen.

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

Output fra begge programmer vil være den samme.

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

I begge programmer har vi oprettet en ordbog square_dictmed et tal-firkantet nøgle / værdipar .

Brug af ordbogens forståelse tillod os imidlertid at oprette en ordbog i en enkelt linje .

Brug af ordbogsforståelse

Fra ovenstående eksempel kan vi se, at ordbogens forståelse skal skrives i et bestemt mønster.

Den minimale syntaks for ordbogsforståelse er:

 ordbog = (nøgle: værdi for vars i iterable) 

Lad os sammenligne denne syntaks med ordbogens forståelse fra eksemplet ovenfor.

Lad os nu se, hvordan vi kan bruge ordbogsforståelse ved hjælp af data fra en anden ordbog.

Eksempel 3: Sådan bruges ordbogsforståelse

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

Produktion

 ('mælk': 0.7752, 'kaffe': 1.9, 'brød': 1.9) 

Her kan vi se, at vi hentede varepriserne i dollars og konverterede dem til pund. Brug af ordbogens forståelse gør denne opgave meget enklere og kortere.

Betingelser i ordbogsforståelse

Vi kan yderligere tilpasse ordbogens forståelse ved at tilføje betingelser til den. Lad os se på et eksempel.

Eksempel 4: Hvis betinget ordbog forståelse

 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) 

Produktion

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

Som vi kan se, er kun de poster med lige værdi tilføjet på grund af ifklausulen i ordbogens forståelse.

Eksempel 5: Flere, hvis betinget ordbog forståelse

 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) 

Produktion

 ('john': 33) 

I dette tilfælde er kun elementerne med en ulige værdi på mindre end 40 føjet til den nye ordbog.

It is because of the multiple if clauses in the dictionary comprehension. They are equivalent to and operation where both conditions have to be true.

Example 6: if-else Conditional Dictionary Comprehension

 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) 

Output

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

In this case, a new dictionary is created via dictionary comprehension.

The items with a value of 40 or more have the value of 'old' while others have the value of 'young'.

Nested Dictionary Comprehension

We can add dictionary comprehensions to dictionary comprehensions themselves to create nested dictionaries. Let's look at an example.

Example 7: Nested Dictionary with Two Dictionary Comprehensions

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

Output

 (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

Selvom ordbogsforståelser er gode til at skrive elegant kode, der er let at læse, er de ikke altid det rigtige valg.

Vi skal være forsigtige, når vi bruger dem som:

  • De kan nogle gange få koden til at køre langsommere og forbruge mere hukommelse.
  • De kan også mindske læsbarheden af ​​koden.

Vi må ikke forsøge at tilpasse en vanskelig logik eller et stort antal ordbogsforståelse indeni dem kun for at gøre koden enkeltforet. I disse tilfælde er det bedre at vælge andre alternativer som sløjfer.

Interessante artikler...