Розуміння словника 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із парою ключ-значення число-квадрат .

Однак використання розуміння словника дозволило нам створити словник в один рядок .

Використання розуміння словника

З наведеного прикладу ми бачимо, що розуміння словника має бути написане за певним зразком.

Мінімальний синтаксис для розуміння словника:

 словник = (ключ: значення для vars в iterable) 

Давайте порівняємо цей синтаксис із розумінням словника з наведеного прикладу.

Тепер давайте подивимося, як ми можемо використовувати розуміння словника, використовуючи дані з іншого словника.

Приклад 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.

Це через численні 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': 'young', 'michael': 'old', 'guideo': 'old', 'john': 'young') 

У цьому випадку новий словник створюється шляхом розуміння словника.

Предмети, що мають значення 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

Хоча розуміння словника чудово підходить для написання елегантного коду, який легко читати, вони не завжди є правильним вибором.

Ми повинні бути обережними, використовуючи їх як:

  • Іноді вони можуть змусити код працювати повільніше і зайняти більше пам'яті.
  • Вони також можуть зменшити читабельність коду.

Ми не повинні намагатися вмістити в них складну логіку або велику кількість розуміння словника лише задля того, щоб зробити код однорядковим. У цих випадках краще вибрати інші варіанти, такі як петлі.

Цікаві статті...