Python - Вложенные Словари

Привет, стремящиеся кoders! Сегодня мы погружаемся в увлекательный мир вложенных словарей в Python. Не волнуйтесь, если вы новичок в программировании - я веду вас по этой теме шаг за шагом, как я делал это для множества студентов на протяжении многих лет своей преподавательской деятельности. Так что возьмите свой любимый напиток, устроитесь комфортно и давайте отправимся в это приключение с Python вместе!

Python - Nested Dictionaries

Вложенные Словари

Что такое Вложенные Словари?

Представьте себе, что у вас есть большая коробка (основной словарь), и внутри этой коробки несколько меньших коробок (вложенные словари). Каждая из этих меньших коробок может содержать различные предметы (пары ключ-значение). Вот по сути что такое вложенный словарь - словарь внутри словаря.

Начнем с простого примера:

student = {
"name": "Alice",
"age": 20,
"grades": {
"math": 95,
"science": 88,
"history": 92
}
}

В этом примере student - наш основной словарь. Он содержит базовую информацию о Alice, включая вложенный словарь grades, который хранит ее оценки по различным предметам.

Создание Вложенного Словаря в Python

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

school = {
"Grade 9": {
"Alice": {
"age": 14,
"subjects": ["Math", "Science", "English"]
},
"Bob": {
"age": 15,
"subjects": ["History", "Art", "PE"]
}
},
"Grade 10": {
"Charlie": {
"age": 16,
"subjects": ["Physics", "Chemistry", "Biology"]
}
}
}

Здесь у нас есть основной словарь school, который содержит уровни классов как ключи. Каждый уровень класса является другим словарем, содержащим имена студентов как ключи. Каждый студент затем имеет свой собственный словарь с личной информацией.

Добавление Элементов в Вложенный Словарь в Python

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

Давайте добавим нового студента в Grade 10:

school["Grade 10"]["Diana"] = {
"age": 15,
"subjects": ["Math", "Computer Science", "Literature"]
}

print(school["Grade 10"])

Вывод:

{
'Charlie': {'age': 16, 'subjects': ['Physics', 'Chemistry', 'Biology']},
'Diana': {'age': 15, 'subjects': ['Math', 'Computer Science', 'Literature']}
}

Мы также можем добавить новый уровень класса:

school["Grade 11"] = {
"Eve": {
"age": 17,
"subjects": ["Economics", "Psychology", "French"]
}
}

print(school.keys())

Вывод:

dict_keys(['Grade 9', 'Grade 10', 'Grade 11'])

Доступ к Элементам Вложенного Словаря в Python

Для доступа к элементам в вложенном словаре мы используем несколько квадратных скобок, каждая из которых представляет собой уровень вложенности. Давайте извлечем некоторую информацию из нашего словаря school:

# Получение возраста Alice
alice_age = school["Grade 9"]["Alice"]["age"]
print(f"Возраст Alice: {alice_age}")

# Получение предметов Charlie
charlie_subjects = school["Grade 10"]["Charlie"]["subjects"]
print(f"Предметы Charlie: {charlie_subjects}")

Вывод:

Возраст Alice: 14
Предметы Charlie: ['Physics', 'Chemistry', 'Biology']

Помните, если вы не уверены насчет структуры вашего вложенного словаря, вы всегда можете использовать метод get(), чтобы избежать исключений KeyError:

# Попытка получить несуществующего студента
frank_age = school.get("Grade 9", {}).get("Frank", {}).get("age", "Не найдено")
print(f"Возраст Frank: {frank_age}")

Вывод:

Возраст Frank: Не найдено

Удаление Словаря из Вложенного Словаря

Для удаления вложенного словаря мы используем ключевое слово del. Давайте удалем Bob из Grade 9:

del school["Grade 9"]["Bob"]
print(school["Grade 9"])

Вывод:

{'Alice': {'age': 14, 'subjects': ['Math', 'Science', 'English']}}

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

Итерация по Вложенному Словарю в Python

Итерация по вложенному словарю требует вложенных циклов. Давайте выведем всю информацию из нашего словаря school:

for grade, students in school.items():
print(f"\n{grade}:")
for student, info in students.items():
print(f"  {student}:")
for key, value in info.items():
print(f"    {key}: {value}")

Вывод:

Grade 9:
Alice:
age: 14
subjects: ['Math', 'Science', 'English']

Grade 10:
Charlie:
age: 16
subjects: ['Physics', 'Chemistry', 'Biology']
Diana:
age: 15
subjects: ['Math', 'Computer Science', 'Literature']

Grade 11:
Eve:
age: 17
subjects: ['Economics', 'Psychology', 'French']

Эта структура вложенных циклов позволяет нам получить и вывести все уровни нашего вложенного словаря.

Методы Работы с Вложенными Словарями

Вот таблица полезных методов для работы с вложенными словарями:

Метод Описание
dict.items() Возвращает объект просмотра, содержащий пары ключ-значение словаря
dict.keys() Возвращает объект просмотра, содержащий ключи словаря
dict.values() Возвращает объект просмотра, содержащий значения словаря
dict.get(key, default) Возвращает значение для указанного ключа, если он существует, иначе возвращает значение по умолчанию
dict.update(other_dict) Обновляет словарь элементами из другого словаря или итерируемого набора пар ключ-значение
dict.pop(key, default) Удаляет и возвращает значение для указанного ключа. Если ключ не существует, возвращает значение по умолчанию

Помните, эти методы могут применяться на любом уровне вложенного словаря.

Итак, у вас есть это, мои дорогие студенты! Мы исследовали все особенности вложенных словарей в Python. От создания и добавления элементов до доступа, удаления и итерации по ним, у вас теперь есть инструменты для работы с этими сложными структурами данных.

Как и с любой концепцией программирования, практика - это ключ. Попробуйте создать свои собственные вложенные словари, возможно, цифровую библиотечную каталогу или кулинарную книгу. Чем больше вы будете играть с этими структурами, тем более уверенно вы будете чувствовать себя.

Помните, в мире программирования ошибки - это просто возможности учиться. Так что не бойтесь экспериментировать и совершать ошибки - так мы все растем как программисты. Продолжайте программировать, учитесь и, что самое важное, наслаждайтесь Python!

Credits: Image by storyset