Якщо ви вже працювали зі словниками, то знаєте, що вони чудово підходять для зберігання пар "ключ-значення". Але що робити, якщо потрібно організувати дані у кілька рівнів? Саме тут стануть у пригоді вкладені словники в Python!

У цій статті ми розглянемо:

  • Що таке вкладений словник і коли його використовувати
  • Як створювати, отримувати доступ і оновлювати вкладені словники
  • Основні операції, які можна виконувати з вкладеними словниками

До кінця цього керівництва ви зможете впевнено створювати і працювати з вкладеними словниками. Почнемо!

Що Таке Вкладений Словник в Python?

У Python словник — це структура даних, яка зберігає пари "ключ-значення". Вкладений словник — це просто словник всередині словника. Це дозволяє зберігати більш складні, ієрархічні структури даних. Уявіть, що це спосіб організувати інформацію на рівні.

Наприклад, припустимо, що ви створюєте програму для відстеження співробітників у компанії. Ви можете використати вкладений словник для зберігання інформації по відділах, де кожен відділ містить словники для окремих співробітників:

company = {
    "Sales": {
        "Alice": {"age": 25, "role": "Sales Executive"},
        "Bob": {"age": 30, "role": "Sales Manager"}
    },
    "Engineering": {
        "Carol": {"age": 28, "role": "Software Engineer"},
        "Dave": {"age": 35, "role": "CTO"}
    }
}

У цьому прикладі company — це словник, який містить два відділи: Sales і Engineering. Кожен відділ сам по собі є словником з іменами співробітників як ключами, а кожен співробітник має ще один словник з деталями про себе.

Як Отримати Доступ до Даних у Вкладеному Словнику

Доступ до значень у вкладеному словнику простий, коли ви розумієте, як це робиться. Вам просто потрібно послідовно вказати ключі, щоб дістатися до потрібного рівня. Ось як це працює:

# Доступ до ролі Аліси в відділі продажів
print(company["Sales"]["Alice"]["role"])  # Вивід: Sales Executive

У цьому прикладі ми починаємо з company, потім переходимо до Sales, потім до Alice, і, нарешті, отримуємо значення ключа "role". Легко, правда?

Що Якщо Ключ Не Існує?

Python видасть помилку KeyError, якщо ви спробуєте отримати доступ до ключа, якого немає. Щоб обробити це безпечно, можна використовувати метод get():

print(company.get("Marketing", {}).get("Alice", {}).get("role", "Role not found"))  # Вивід: Role not found

Цей метод дозволяє вказати значення за замовчуванням (наприклад, "Role not found"), якщо якийсь ключ відсутній по дорозі.

Додавання та Оновлення Даних у Вкладеному Словнику

Додавання нових записів або оновлення існуючих даних у вкладеному словнику дуже схоже на доступ до них. Вам потрібно вказати ключі та присвоїти значення на цільовому рівні:

Додавання Нового Відділу

# Додавання нового відділу
company["HR"] = {
    "Eve": {"age": 29, "role": "HR Manager"}
}

Цей код створює новий відділ HR з одним співробітником, Ів.

Оновлення Існуючих Даних

# Оновлення ролі Боба у відділі продажів
company["Sales"]["Bob"]["role"] = "Senior Sales Manager"

Тут ми оновлюємо роль Боба до "Senior Sales Manager" у відділі продажів.

Видалення Даних із Вкладеного Словника

Для видалення конкретних записів із вкладеного словника можна використовувати del. Будьте обережні з цією операцією, оскільки видалення неіснуючого ключа викличе KeyError, якщо попередньо не перевірити його наявність.

Видалення Співробітника

# Видалення Керол з інженерного відділу
del company["Engineering"]["Carol"]

Тепер дані Керол видалено з інженерного відділу.

Використання pop() для Безпечного Видалення

Використання pop() дозволяє вказати значення за замовчуванням, якщо ключ не знайдено:

company["Sales"].pop("Charlie", "Employee not found")  # Вивід: Employee not found

Якщо "Charlie" не існує у відділі продажів, цей код не викличе помилку, а замість цього поверне "Employee not found".

Перебір Вкладеного Словника

Іноді може знадобитися перебрати вкладений словник, щоб відобразити або обробити його дані. Давайте розглянемо кілька поширених способів зробити це.

Перебір Відділів і Співробітників

Ось приклад, який проходить по кожному відділу і співробітнику:

for department, employees in company.items():
    print(f"Відділ: {department}")
    for employee, details in employees.items():
        print(f"  Співробітник: {employee}, Роль: {details['role']}")

Цей код виведе кожен відділ, ім'я співробітника і його роль. Ви можете налаштувати його для відображення інших деталей.

Перебір з Використанням Вкладених Циклів for

Якщо вам потрібен ще більш детальний контроль, можна використовувати вкладені цикли for для доступу до глибших рівнів:

for department, employees in company.items():
    for employee, details in employees.items():
        for detail, value in details.items():
            print(f"{employee} - {detail}: {value}")

Цей підхід дає доступ до кожної окремої деталі у записі кожного співробітника.

Основні Операції та Поради для Вкладених Словників

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

  • Перевірка наявності ключа: Використовуйте in або get(), щоб уникнути помилок.
  • Використання defaultdict: З модуля collections, це спрощує створення вкладених словників.
  • Копіювання вкладених словників: Використовуйте copy.deepcopy() з модуля copy, щоб уникнути ненавмисних змін.
from collections import defaultdict
from copy import deepcopy

# Використання defaultdict для вкладених словників
company = defaultdict(lambda: defaultdict(dict))

# Приклад глибокого копіювання
new_company = deepcopy(company)

Ці інструменти особливо корисні при роботі з великими або складними вкладеними словниками.

Резюме

Вітаю! Ви багато чого дізналися про вкладені словники. Ось короткий огляд того, що ми розглянули:

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

З невеликою практикою ви будете працювати з вкладеними словниками як професіонал. Експериментуйте і насолоджуйтесь програмуванням на Python!