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_dict
a 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 if
szó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 if
szótár megértésének több mondata miatt. Ezek egyenértékűek a and
mű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.