Python szótár megértése

Ebben az oktatóanyagban megismerjük a Python szótár megértését és annak használatát példák segítségével.

A szótárak a Python adattípusai, amelyek lehetővé teszik az adatok kulcs / érték párban történő tárolását . Például:

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

Ha többet szeretne megtudni róluk, látogasson el: Python szótár

Mi a szótárértés a Pythonban?

A szótár megértése elegáns és tömör módszer a szótárak létrehozására.

1. példa: Szótár megértése

Vegye figyelembe a következő kódot:

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

Most hozzuk létre a szótárt a fenti programban a szótár megértése segítségével.

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

Mindkét program kimenete azonos lesz.

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

Mindkét programban hoztunk létre egy szótárt square_dicta szám-négyzet kulcs / érték párt .

A szótárértés használata azonban lehetővé tette számunkra, hogy szótárat készítsünk egyetlen sorban .

A szótárértés használata

A fenti példából láthatjuk, hogy a szótár megértését meghatározott mintával kell megírni.

A szótár megértésének minimális szintaxisa:

 szótár = (kulcs: az iterálható változók értéke) 

Hasonlítsuk össze ezt a szintaxist a fenti példa szótár-megértésével.

Most nézzük meg, hogyan használhatjuk a szótár megértését egy másik szótár adatainak felhasználásával.

3. példa: A szótárértés használata

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

Kimenet

 („tej”: 0,7752, „kávé”: 1,9, „kenyér”: 1,9) 

Itt láthatjuk, hogy a cikkárakat dollárban kaptuk meg, és fontra váltottuk. A szótárértés használata ezt a feladatot sokkal egyszerűbbé és rövidebbé teszi.

Feltételek a szótár megértésében

A szótár megértését tovább testreszabhatjuk, ha feltételeket adunk hozzá. Nézzünk meg egy példát.

4. példa: Ha a Feltételes szótár megértése

 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) 

Kimenet

 („jack”: 38, „michael”: 48) 

Mint láthatjuk, csak a páros értékű elemek kerültek hozzáadásra, a ifszótárértés záradéka miatt.

5. példa: Többszörös, ha feltételes szótárértés

 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) 

Kimenet

 ('john': 33) 

Ebben az esetben csak azokat a tételeket vették fel az új szótárba, amelyek páratlan értéke kevesebb, mint 40.

A ifszótár megértésének több mondata miatt. Ezek egyenértékűek a andműködéssel, ahol mindkét feltételnek igaznak kell lennie.

6. példa: if-else feltételes szótár megértése

 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) 

Kimenet

 ('jack': 'fiatal', 'michael': 'öreg', 'guido': 'öreg', 'john': 'fiatal') 

Ebben az esetben egy új szótár jön létre a szótár megértése révén.

A 40 vagy annál nagyobb értékű tételek értéke „régi”, másoké pedig „fiatal”.

Beágyazott szótár megértése

A beágyazott szótárak létrehozásához hozzáadhatunk szótárértéseket magukhoz a szótármegértésekhez is. Nézzünk meg egy példát.

7. példa: Beágyazott szótár két szótárértéssel

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

Kimenet

 (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

Annak ellenére, hogy a szótár megértése kiválóan használható elegáns, könnyen olvasható kód megírásához, nem mindig megfelelő választás.

Óvatosnak kell lennünk, amikor ezeket a következőképpen használjuk:

  • Időnként lassabbá tehetik a kód futtatását és több memóriát fogyaszthatnak.
  • Csökkenthetik a kód olvashatóságát is.

Nem szabad megpróbálnunk egy nehéz logikát vagy nagyszámú szótármegértést beilleszteni magukba, csak azért, hogy a kódot egy vonalba állítsuk. Ezekben az esetekben jobb, ha más alternatívákat választ, mint például a hurkok.

érdekes cikkek...