Porozumění slovníku Python

V tomto výukovém programu se na příkladech seznámíme s porozuměním slovníku Pythonu a jeho používáním.

Slovníky jsou datové typy v Pythonu, což nám umožňuje ukládat data do dvojice klíč / hodnota . Například:

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

Chcete-li se o nich dozvědět více, navštivte: Slovník Pythonu

Co je slovníkové porozumění v Pythonu?

Porozumění slovníku je elegantní a výstižný způsob vytváření slovníků.

Příklad 1: Porozumění slovníku

Zvažte následující kód:

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

Nyní vytvořme slovník ve výše uvedeném programu pomocí porozumění slovníku.

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

Výstup obou programů bude stejný.

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

V obou programech jsme vytvořili slovník square_dicts dvojicí klíč / hodnota číselný čtverec .

Použití porozumění slovníku nám však umožnilo vytvořit slovník v jednom řádku .

Použití slovníku s porozuměním

Z výše uvedeného příkladu vidíme, že porozumění slovníku by mělo být napsáno konkrétním vzorem.

Minimální syntaxe pro porozumění slovníku je:

 dictionary = (key: value for vars in iterable) 

Porovnejme tuto syntaxi s porozuměním slovníku z výše uvedeného příkladu.

Nyní se podívejme, jak můžeme použít porozumění slovníku pomocí dat z jiného slovníku.

Příklad 3: Jak používat slovníkové porozumění

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

Výstup

 („mléko“: 0,7752, „káva“: 1,9, „chléb“: 1,9) 

Zde vidíme, že jsme načetli ceny zboží v dolarech a převedli je na libry. Díky použití slovníku je tento úkol mnohem jednodušší a kratší.

Podmíněné výrazy ve výkladu slovníku

Můžeme dále přizpůsobit porozumění slovníku přidáním podmínek. Podívejme se na příklad.

Příklad 4: Je-li podmíněné porozumění slovníku

 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) 

Výstup

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

Jak vidíme, byly přidány pouze položky se sudou hodnotou, kvůli ifklauzuli ve výkladu slovníku.

Příklad 5: Vícenásobné porozumění podmíněného slovníku

 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) 

Výstup

 ('john': 33) 

V tomto případě byly do nového slovníku přidány pouze položky s lichou hodnotou menší než 40.

Je to kvůli několika ifvětám ve slovníku s porozuměním. Jsou ekvivalentní andprovozu, kde musí být obě podmínky pravdivé.

Příklad 6: Podmíněné porozumění slovníku if-else

 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) 

Výstup

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

V tomto případě je nový slovník vytvořen pomocí porozumění slovníku.

Položky s hodnotou 40 a více mají hodnotu „starého“, zatímco jiné mají hodnotu „mladého“.

Pochopení vnořeného slovníku

Můžeme přidat porozumění slovníku k samotnému porozumění slovníku, abychom vytvořili vnořené slovníky. Podívejme se na příklad.

Příklad 7: Vnořený slovník se dvěma výkladovými slovníky

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

Výstup

 (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

I když jsou srozumitelné slovníky skvělé pro psaní elegantního kódu, který je snadno čitelný, nejsou vždy správnou volbou.

Při jejich používání musíme být opatrní jako:

  • Někdy mohou zpomalit běh kódu a spotřebovat více paměti.
  • Mohou také snížit čitelnost kódu.

Nesmíme se snažit, aby se do nich vešla složitá logika nebo velké množství porozumění slovníku, jen aby byl kód jednotný. V těchto případech je lepší zvolit jiné alternativy, jako jsou smyčky.

Zajímavé články...