Словарь: создание и базовые операции
Содержание курса
Безопасное чтение через dict.get() и изменение пар
В предыдущей секции мы оставили подсказку: проверка через in перед d[key] работает, но многословна. Метод get() делает то же самое в одну строку.
dict.get(key, default)
Метод принимает ключ и необязательный аргумент default. Если ключ есть — возвращает значение. Если ключа нет — возвращает default, а не выбрасывает исключение.
person = {'name': 'Анна', 'age': 25, 'city': 'Москва'}
print(person.get('name')) # Анна
print(person.get('phone')) # None
print(person.get('phone', 'нет')) # нет
Когда default не указан, он равен None — Python не падает, просто возвращает «ничего». Когда указан, как 'нет' в третьем вызове, именно это значение вы получите вместо отсутствующего ключа.
get() удобен там, где отсутствие ключа — нормальная ситуация, а не ошибка. Например, пользователь мог не заполнить поле 'phone', и программа должна продолжить работу, а не упасть.
Добавление и изменение пар: d[key] = value
Для записи в словарь используется одно и то же присваивание — независимо от того, новый ключ или уже существующий:
person = {'name': 'Анна', 'age': 25}
# Изменяем существующий ключ
person['age'] = 26
# Добавляем новый ключ
person['city'] = 'Москва'
print(person) # {'name': 'Анна', 'age': 26, 'city': 'Москва'}
Python сам определяет, что делать: если ключ 'age' уже есть — перезапишет значение 25 на 26. Если ключа 'city' не было — создаст новую пару. Синтаксис одинаковый, поведение зависит от наличия ключа.
Это отличает словарь от списка: в список нельзя добавить элемент присваиванием lst[5] = 'x', если индекс 5 ещё не существует — будет IndexError. Словарь же спокойно создаёт новый ключ на лету.
Один нюанс: если нужно обновить числовое значение относительно текущего, пишут так:
person['age'] += 1 # читаем, прибавляем, записываем обратно
print(person['age']) # 27
Здесь person['age'] += 1 раскрывается в person['age'] = person['age'] + 1. Ключ 'age' должен существовать, иначе правая часть выдаст KeyError — именно тот случай, когда стоит заранее убедиться в наличии ключа или задать значение по умолчанию.
