Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Словникові включення | Генератори Списків та Словників
Підручник з Циклів Python
Секція 4. Розділ 3
single

single

Словникові включення

Свайпніть щоб показати меню

Словникові включення надають лаконічний спосіб створення словників у Python, подібно до включень списків. Вони дозволяють перетворювати дані на пари ключ-значення в одному рядку коду.

Основна ідея словникового включення полягає у створенні нового словника шляхом застосування виразу до кожної пари ключ-значення в ітерабельній змінній.

{key_expression: value_expression for item in iterable}
  • key_expression: визначає ключ для кожної пари ключ-значення;
  • value_expression: визначає значення, що відповідає ключу;
  • iterable: джерело елементів для обробки (наприклад, список, range або інша ітерабельна структура).
Note
Примітка

На відміну від списків, словники вимагають як ключ, так і значення, розділені двокрапкою (:), і використовують {} замість [].

12345678910111213141516
travel_wishlist = [ ['Paris', 2000], ['Tokyo', 3000], ['New York', 2500], ['Kyoto', 1500], ['Sydney', 4000] ] # Initialize an empty dictionary travel_budget = {} # Populate the dictionary using a for loop for destination, cost in travel_wishlist: travel_budget[destination] = cost print(travel_budget)

Цей код ітерує список travel_wishlist, де кожен підсписок містить пункт призначення та його бюджет. Цикл for призначає пункт призначення як ключ, а бюджет як значення у словнику travel_budget.

123456789101112
travel_wishlist = [ ['Paris', 2000], ['Tokyo', 3000], ['New York', 2500], ['Kyoto', 1500], ['Sydney', 4000] ] # Create the dictionary using dictionary comprehension travel_budget = {destination: cost for destination, cost in travel_wishlist} print(travel_budget)

У цьому прикладі використовується словникове включення для досягнення такого ж результату, як і в попередньому прикладі. Кожен пункт призначення стає ключем, а відповідна вартість — значенням у словнику travel_budget, усе в одному рядку.

Обробка ValueError при розпаковці елементів з більш ніж двома значеннями

Під час використання словникових включень часто розпаковують елементи з ітерованого об'єкта у змінні для ключів і значень. Якщо кожен елемент у вашому ітерованому об'єкті містить більше двох значень (наприклад, список [city, country, budget]), спроба розпакувати лише у дві змінні призведе до ValueError.

Наприклад, якщо ви напишете:

{city: country for city, country in travel_wishlist}

і travel_wishlist містить підсписки з трьома елементами, Python видасть таку помилку:

ValueError: too many values to unpack (expected 2)

Чому це відбувається?

  • Python очікує розпакувати рівно два значення (для city та country), але кожен підсписок має три.
  • Ця невідповідність призводить до виникнення ValueError, де чітко вказано, що передано більше значень, ніж очікувалося.

Як це вирішити?

  • Розпаковуйте всі елементи, але використовуйте лише потрібні:

for city, country, budget in travel_wishlist — кожне значення присвоюється змінній.

  • Ігноруйте невикористані значення за допомогою підкреслення:

for city, country, _ in travel_wishlist — підкреслення _ є поширеною практикою для невикористаних змінних.

  • Використовуйте зріз для вибору елементів:

for city, country in [item[:2] for item in travel_wishlist] — зріз кожного підсписку до перших двох елементів перед розпаковкою.

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

1234567891011121314151617181920
# Example data: each tuple has three elements (city, country, budget) travel_wishlist = [ ("Paris", "France", 2000), ("Tokyo", "Japan", 3000), ("New York", "USA", 2500) ] # Attempting to unpack only two variables (incorrect) try: city_to_country = {city: country for city, country in travel_wishlist} except ValueError as e: print("Error:", e) # Correct: unpack all elements, using underscore for unused value city_to_country = {city: country for city, country, _ in travel_wishlist} print("Handled with underscore:", city_to_country) # Correct: use slicing to select only needed elements city_to_country = {item[0]: item[1] for item in travel_wishlist} print("Handled with slicing:", city_to_country)
Завдання

Проведіть, щоб почати кодувати

Мандрівник бажає організувати свій travel_wishlist, зіставивши кожну назву міста з відповідною країною. Для ефективного досягнення цієї мети потрібно перетворити дані у словник.

  • Виділити назви міст та відповідні країни з travel_wishlist.
  • Зберегти отриманий словник у змінній city_to_country.

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 3
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

some-alt