Словари: эффективное хранение данных по ключу
В прошлых уроках мы освоили списки — мощный инструмент для хранения упорядоченных данных. Но что, если вам нужно хранить информацию не по порядковому номеру, а по уникальному имени или идентификатору? Например, данные о студенте по его имени или цену товара по названию. Для таких задач в Python есть словари (dictionaries).
Что такое словари и зачем они нужны?
Словарь в Python — это неупорядоченная коллекция элементов, где каждый элемент хранится как пара "ключ: значение" (key: value). Представьте обычный словарь: каждому слову (ключу) соответствует его определение (значение).
Ключи в словаре должны быть уникальными и неизменяемыми (например, строки, числа, кортежи). Значения могут быть любыми типами данных и могут повторяться.
Словари незаменимы, когда нужно быстро найти информацию по её уникальному идентификатору, а не по индексу.
Создаём словари
Словари создаются с помощью фигурных скобок {} или функции dict(). Пары "ключ: значение" разделяются двоеточием, а сами пары — запятыми.
# Пустой словарь
empty_dict = {}
another_empty_dict = dict()
# Словарь с данными о пользователе
user_profile = {
"name": "Иван",
"age": 30,
"city": "Москва",
"is_active": True
}
# Словарь с ценами на фрукты
fruit_prices = {
"apple": 120,
"banana": 80,
"orange": 150
}
print(user_profile)
print(fruit_prices)
Важно: До Python 3.7 порядок элементов в словаре не гарантировался. Начиная с Python 3.7, порядок вставки сохраняется, но не стоит полагаться на это как на основное свойство словаря. Главное — это доступ по ключу.
Получаем доступ к элементам словаря
Доступ к значениям осуществляется по их ключам, используя квадратные скобки [].
user_profile = {
"name": "Иван",
"age": 30,
"city": "Москва"
}
print(f"Имя пользователя: {user_profile['name']}")
print(f"Возраст пользователя: {user_profile['age']}")
# Попытка доступа к несуществующему ключу вызовет ошибку KeyError
# print(user_profile['country']) # Ошибка!
Чтобы безопасно получить значение, если ключ может отсутствовать, используйте метод get(). Он позволяет указать значение по умолчанию, которое будет возвращено, если ключ не найден.
print(f"Город пользователя: {user_profile.get('city')}")
print(f"Страна пользователя (по умолчанию 'Неизвестно'): {user_profile.get('country', 'Неизвестно')}")
Изменяем и добавляем элементы
Вы можете изменять значения существующих элементов или добавлять новые, просто присваивая значение по ключу.
user_profile = {
"name": "Иван",
"age": 30,
"city": "Москва"
}
# Изменяем значение существующего ключа
user_profile["age"] = 31
print(f"Новый возраст: {user_profile['age']}")
# Добавляем новый элемент
user_profile["email"] = "ivan@example.com"
print(user_profile)
# Добавляем ещё один элемент
user_profile["occupation"] = "Разработчик"
print(user_profile)
Удаляем элементы
Для удаления элементов из словаря используйте оператор del или метод pop().
del: Удаляет элемент по ключу. Если ключа нет, вызоветKeyError.pop(key, default_value): Удаляет элемент по ключу и возвращает его значение. Если ключ не найден, можно указать значение по умолчанию, которое будет возвращено, иначе вызоветKeyError.
user_profile = {
"name": "Иван",
"age": 31,
"city": "Москва",
"email": "ivan@example.com"
}
# Удаляем элемент с помощью del
del user_profile["email"]
print(f"После удаления email: {user_profile}")
# Удаляем элемент с помощью pop()
removed_city = user_profile.pop("city")
print(f"Удалённый город: {removed_city}")
print(f"После удаления города: {user_profile}")
# Пытаемся удалить несуществующий ключ с pop() и значением по умолчанию
not_existing_key = user_profile.pop("country", "Ключ не найден")
print(f"Результат pop для несуществующего ключа: {not_existing_key}")
# Очищаем весь словарь
user_profile.clear()
print(f"После очистки: {user_profile}")
Полезные методы словарей
keys(), values(), items()
Эти методы возвращают "представления" (view objects) ключей, значений или пар "ключ-значение". Эти представления динамически обновляются при изменении словаря.
student = {
"id": 101,
"name": "Анна",
"major": "Информатика",
"gpa": 4.5
}
# Получаем все ключи
all_keys = student.keys()
print(f"Ключи: {all_keys}")
# Получаем все значения
all_values = student.values()
print(f"Значения: {all_values}")
# Получаем все пары "ключ: значение"
all_items = student.items()
print(f"Пары: {all_items}")
# Пример: итерация по ключам
print("\nИтерация по ключам:")
for key in student.keys():
print(key)
# Пример: итерация по значениям
print("\nИтерация по значениям:")
for value in student.values():
print(value)
# Пример: итерация по парам "ключ: значение"
print("\nИтерация по парам 'ключ: значение':")
for key, value in student.items():
print(f"{key}: {value}")
update()
Метод update() позволяет объединять словари или добавлять пары "ключ: значение" из другого словаря или итерируемого объекта.
user_info = {
"name": "Олег",
"age": 28
}
additional_info = {
"city": "Санкт-Петербург",
"email": "oleg@example.com"
}
user_info.update(additional_info)
print(f"После update: {user_info}")
# Если ключи совпадают, значения из обновляющего словаря перезапишут старые
new_age_info = {"age": 29, "occupation": "Инженер"}
user_info.update(new_age_info)
print(f"После второго update: {user_info}")
Проверяем наличие ключа
Чтобы проверить, существует ли ключ в словаре, используйте оператор in.
product = {
"name": "Ноутбук",
"price": 75000,
"available": True
}
if "price" in product:
print(f"Цена ноутбука: {product['price']} руб.")
if "color" not in product:
print("Цвет не указан в описании продукта.")
Практическое задание
Представьте, что вы разрабатываете систему для учёта оценок студентов.
- Создайте словарь
student_grades, где ключами будут имена студентов (строки), а значениями — списки их оценок (целые числа). Добавьте данные для 3-4 студентов. Пример:{"Иванов": [4, 5, 3, 5], "Петрова": [5, 5, 4]} - Добавьте новому студенту "Сидоров" оценки:
[3, 4, 3]. - Измените одну из оценок для "Иванова" (например, первую оценку с 4 на 5).
- Выведите на экран средний балл для каждого студента.
Подсказка: Для вычисления среднего используйте сумму элементов списка (
sum()) и количество элементов (len()). - Удалите студента "Петрова" из словаря.
- Проверьте, есть ли студент "Козлов" в словаре, и выведите соответствующее сообщение.
# Ваш код здесь
Итоги и что дальше?
Словари — мощный инструмент для работы с данными, где важна ассоциация "ключ-значение". Они позволяют быстро получать доступ к информации и эффективно её организовывать. Вы научились создавать словари, работать с их элементами, а также использовать полезные методы для управления данными.
Теперь, когда вы освоили списки и словари, пришло время познакомиться с другими важными коллекциями данных в Python: кортежами и множествами. Они обладают своими уникальными свойствами и областями применения, которые мы рассмотрим на следующей странице. Готовы узнать, чем они отличаются и когда их лучше использовать? 😉