single
Словникові включення
Свайпніть щоб показати меню
Словникові включення надають лаконічний спосіб створення словників у Python, подібно до включень списків. Вони дозволяють перетворювати дані на пари ключ-значення в одному рядку коду.
Основна ідея словникового включення полягає у створенні нового словника шляхом застосування виразу до кожної пари ключ-значення в ітерабельній змінній.
{key_expression: value_expression for item in iterable}
key_expression: визначає ключ для кожної пари ключ-значення;value_expression: визначає значення, що відповідає ключу;iterable: джерело елементів для обробки (наприклад, список, range або інша ітерабельна структура).
На відміну від списків, словники вимагають як ключ, так і значення, розділені двокрапкою (:), і використовують {} замість [].
12345678910111213141516travel_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.
123456789101112travel_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.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат