Понимание словаря Python

В этом руководстве мы узнаем о понимании словаря Python и о том, как его использовать с помощью примеров.

Словари - это типы данных в Python, которые позволяют нам хранить данные в паре ключ / значение . Например:

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

Чтобы узнать о них больше, посетите: Словарь Python

Что такое понимание словаря в Python?

Понимание словарей - это элегантный и лаконичный способ создания словарей.

Пример 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) 

Вывод

 ('jack': 38, 'michael': 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.

Это из-за множества ifпредложений в понимании словаря. Они эквивалентны andоперации, в которой должны выполняться оба условия.

Пример 6: понимание условного словаря 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) 

Вывод

 ('jack': 'молодой', 'michael': 'старый', 'guido': 'старый', 'john': 'молодой') 

В этом случае новый словарь создается через понимание словаря.

Предметы со значением 40 или более имеют значение «старые», а другие - значение «молодые».

Понимание вложенного словаря

Мы можем добавить понимание словаря к самому пониманию словаря, чтобы создать вложенные словари. Давайте посмотрим на пример.

Пример 7: Вложенный словарь с двумя пониманиями словаря

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

Вывод

 (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

Несмотря на то, что понимание словаря отлично подходит для написания элегантного кода, который легко читать, это не всегда правильный выбор.

Мы должны быть осторожны при использовании их в качестве:

  • Иногда они могут замедлить выполнение кода и потреблять больше памяти.
  • Они также могут снизить читабельность кода.

Мы не должны пытаться уместить в них сложную логику или большое количество словарных понятий только ради того, чтобы сделать код однострочным. В этих случаях лучше выбрать другие альтернативы, например петли.

Интересные статьи...