Разумевање Питхон речника

У овом упутству ћемо научити о разумевању Питхон речника и како га користити помоћу примера.

Речници су типови података у Питхону који нам омогућавају чување података у пару кључ / вредност . На пример:

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

Да бисте сазнали више о њима, посетите: Питхон Дицтионари

Шта је разумевање речника у Питхону?

Разумевање речника је елегантан и сажет начин за стварање речника.

Пример 1: Разумевање речника

Узмите у обзир следећи код:

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

Хајде сада да креирамо речник у горњем програму користећи разумевање речника.

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

Излаз оба програма биће исти.

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

У оба програма креирали смо речник square_dictса паром кључ / вредност броја квадрат .

Међутим, коришћење разумевања речника омогућило нам је да креирамо речник у једном реду .

Коришћење разумевања речника

Из горњег примера видимо да би разумевање речника требало написати по одређеном обрасцу.

Минимална синтакса за разумевање речника је:

 речник = (кључ: вредност за варс у итерабле-у) 

Упоредимо ову синтаксу са разумевањем речника из горњег примера.

Сада, да видимо како можемо да користимо разумевање речника користећи податке из другог речника.

Пример 3: Како се користи разумевање речника

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

Оутпут

 („млеко“: 0,7752, „кафа“: 1,9, „хлеб“: 1,9) 

Овде можемо видети да смо пронашли цене предмета у доларима и претворили их у фунте. Коришћење разумевања речника чини овај задатак много једноставнијим и краћим.

Условљавања у разумевању речника

Разумевање речника можемо даље прилагодити додавањем услова. Погледајмо пример.

Пример 4: Ако условно разумевање речника

 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) 

Оутпут

 ('јацк': 38, 'мицхаел': 48) 

Као што видимо, додате су само ставке са парном вредношћу, због ifклаузуле у разумевању речника.

Пример 5: Вишеструко разумевање условног речника

 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) 

Оутпут

 ('Јохн': 33) 

У овом случају, у нови речник додане су само ставке непарне вредности мање од 40.

It is because of the multiple if clauses in the dictionary comprehension. They are equivalent to and operation where both conditions have to be true.

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

Output

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

In this case, a new dictionary is created via dictionary comprehension.

The items with a value of 40 or more have the value of 'old' while others have the value of 'young'.

Nested Dictionary Comprehension

We can add dictionary comprehensions to dictionary comprehensions themselves to create nested dictionaries. Let's look at an example.

Example 7: Nested Dictionary with Two Dictionary Comprehensions

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

Output

 (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

Иако су разумевања речника одлична за писање елегантног кода који се лако чита, они нису увек прави избор.

Морамо бити опрезни док их користимо као:

  • Понекад могу успорити рад кода и потрошити више меморије.
  • Такође могу смањити читљивост кода.

Не смемо покушати да уклопимо тешку логику или велики број разумевања речника у њих само ради тога да код буде једноредан. У тим случајевима је боље изабрати друге алтернативе попут петљи.

Занимљиви Чланци...