Python Dictionary Comprehension

I denna handledning lär vi oss om Python-ordlistans förståelse och hur man använder den med hjälp av exempel.

Ordböcker är datatyper i Python som gör att vi kan lagra data i nyckel / värdepar . Till exempel:

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

För att lära dig mer om dem, besök: Python Dictionary

Vad är ordbokförståelse i Python?

Ordbokförståelse är ett elegant och koncist sätt att skapa ordböcker.

Exempel 1: Ordbokförståelse

Tänk på följande kod:

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

Låt oss nu skapa ordboken i ovanstående program med hjälp av ordlistans förståelse.

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

Utgången från båda programmen kommer att vara densamma.

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

I båda programmen har vi skapat en ordbok square_dictmed siffertangent / värdepar .

Men med hjälp av ordförståelsen fick vi skapa en ordbok i en enda rad .

Använda ordlistaförståelse

Från exemplet ovan kan vi se att ordförståelsen ska skrivas i ett specifikt mönster.

Den minimala syntaxen för ordförståelse är:

 ordbok = (nyckel: värde för vars i iterable) 

Låt oss jämföra denna syntax med ordförståelsen från exemplet ovan.

Låt oss nu se hur vi kan använda ordlistaförståelse med hjälp av data från en annan ordlista.

Exempel 3: Hur man använder ordlistaförstå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

 ('mjölk': 0,7752, 'kaffe': 1,9, 'bröd': 1,9) 

Här kan vi se att vi hämtade artikelpriserna i dollar och konverterade dem till pund. Att använda ordlistans förståelse gör denna uppgift mycket enklare och kortare.

Villkor i ordboksförståelse

Vi kan ytterligare anpassa ordlistans förståelse genom att lägga till villkor för den. Låt oss titta på ett exempel.

Exempel 4: If Conditional Dictionary Comprehension

 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 har bara artiklar med jämnt värde lagts till på grund av ifklausulen i ordlistans förståelse.

Exempel 5: Multipla om villkorlig ordbokförstå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 det här fallet har bara artiklar med ett udda värde på mindre än 40 lagts till i den nya ordlistan.

Det beror på flera ifsatser i ordlistans förståelse. De motsvarar anddrift där båda förhållandena måste vara sanna.

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

Produktion

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

I det här fallet skapas en ny ordbok via ordförståelsen.

Objekten med värdet 40 eller mer har värdet "gammalt" medan andra har värdet "ungt".

Nested Dictionary Comprehension

Vi kan lägga till ordlistaförståelser i själva ordförtalsförståelserna för att skapa kapslade ordböcker. Låt oss titta på ett exempel.

Exempel 7: Nestad ordbok med två ordboksförståelser

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

Produktion

 (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

Även om ordförståelser är bra för att skriva elegant kod som är lätt att läsa, är de inte alltid rätt val.

Vi måste vara försiktiga när vi använder dem som:

  • De kan ibland få koden att gå långsammare och konsumera mer minne.
  • De kan också minska kodens läsbarhet.

Vi får inte försöka passa in en svår logik eller ett stort antal ordboksförståelser inuti dem bara för att göra koden enda fodrad. I dessa fall är det bättre att välja andra alternativ som slingor.

Intressanta artiklar...