Python Dictionary Comprehension

I denne opplæringen vil vi lære om Python-ordbokforståelse og hvordan du bruker den ved hjelp av eksempler.

Ordbøker er datatyper i Python som lar oss lagre data i nøkkel / verdipar . For eksempel:

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

For å lære mer om dem besøk: Python Dictionary

Hva er ordbokforståelse i Python?

Ordbokforståelse er en elegant og kortfattet måte å lage ordbøker på.

Eksempel 1: Ordbokforståelse

Vurder følgende kode:

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

La oss nå lage ordboken i programmet ovenfor ved hjelp av ordbokforståelse.

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

Produksjonen fra begge programmene 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 programmene har vi laget en ordbok square_dictmed tall-kvadrat nøkkel / verdipar .

Imidlertid gjorde bruk av ordbokforståelse oss i stand til å lage en ordbok i en enkelt linje .

Bruke ordbokforståelse

Fra eksemplet ovenfor kan vi se at ordbokforståelse skal skrives i et bestemt mønster.

Den minimale syntaksen for ordforståelse er:

 ordbok = (nøkkel: verdi for vars i iterable) 

La oss sammenligne denne syntaksen med ordbokforståelsen fra eksemplet ovenfor.

La oss nå se hvordan vi kan bruke ordbokforståelse ved hjelp av data fra en annen ordbok.

Eksempel 3: Hvordan bruke ordbokforstå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) 

Produksjon

 ('melk': 0,7752, 'kaffe': 1,9, 'brød': 1,9) 

Her kan vi se at vi hentet vareprisene i dollar og konverterte dem til pund. Bruk av ordbokforståelse gjør denne oppgaven mye enklere og kortere.

Betingelser i ordbokforståelse

Vi kan tilpasse ordforståelsen ytterligere ved å legge til betingelser for den. La oss se på et eksempel.

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

Produksjon

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

Som vi kan se, er bare elementene med jevn verdi lagt til på grunn av ifparagrafen i ordbokforståelsen.

Eksempel 5: Flere hvis Conditional Dictionary Comprehension

 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) 

Produksjon

 ('john': 33) 

I dette tilfellet er bare elementene med en merkelig verdi på mindre enn 40 lagt til i den nye ordboken.

Det er på grunn av flere ifledd i ordbokens forståelse. De tilsvarer anddrift der begge forholdene må være sanne.

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

Produksjon

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

I dette tilfellet opprettes en ny ordbok via ordbokforståelse.

Varene med verdien 40 eller mer har verdien 'gammel' mens andre har verdien 'ung'.

Nestet ordbokforståelse

Vi kan legge til ordbokforståelser i ordbokforståelsene selv for å lage nestede ordbøker. La oss se på et eksempel.

Eksempel 7: Nestet ordbok med to ordbokforståelser

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

Produksjon

 (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

Selv om ordbokforståelse er bra for å skrive elegant kode som er lett å lese, er de ikke alltid det riktige valget.

Vi må være forsiktige når vi bruker dem som:

  • Noen ganger kan de få koden til å gå tregere og forbruke mer minne.
  • De kan også redusere lesbarheten til koden.

Vi må ikke prøve å passe inn i en vanskelig logikk eller et stort antall ordbokforståelse i dem bare for å gjøre koden enkel. I disse tilfellene er det bedre å velge andre alternativer som sløyfer.

Interessante artikler...