РАЗБИРАЕМ ПО ШАГАМ
От идеи к работающему коду
У предмета есть свойства: имя, энергия, количество. Словарь позволяет хранить их по понятным ключам вместо запоминания позиции каждого поля в списке.
Сразу к запуску примера ↓
- 1Ключ свойства
- 2Значение
- 3Чтение и обновление
1. Ключ и значение
Словарь dict записывается в фигурных скобках. Пара ключ: значение связывает название свойства с данными. hero["name"] ищет ключ name, а не первую запись.
Ключи уникальны. При повторном присваивании тому же ключу старое значение заменяется. Строковые ключи чувствительны к регистру: Name и name — разные имена.
hero = {"name": "Барсик", "energy": 100}print(hero["name"])print(hero["energy"])2. Безопасное чтение через get
Обращение через квадратные скобки требует существующий ключ, иначе будет KeyError. Метод get позволяет указать результат для отсутствующего ключа.
get не добавляет ключ в словарь. Он только читает значение или возвращает запасной вариант. Для обязательного поля полезна строгая проверка, для необязательного — понятное значение по умолчанию.
hero = {"name": "Барсик"}print(hero.get("weapon", "Нет оружия"))print("weapon" in hero)3. Меняем запись и перебираем поля
Чтобы обновить поле, присвой значение по его ключу. Сокращение hero["energy"] -= 15 уменьшает уже существующее числовое значение. Новому ключу можно присвоить первое значение.
Метод items выдаёт пары ключ–значение. В цикле удобно распаковать каждую пару в два имени. Python сохраняет порядок добавления ключей, но смысл записи всё равно задают ключи, а не их позиции.
hero = {"name": "Барсик", "energy": 100}hero["energy"] -= 15hero["level"] = 2for key, value in hero.items(): print(key, value)4. Объединяем количества
Если один товар встречается в двух словарях, количества нужно сложить. Обычное обновление словаря заменит значение и потеряет часть количества.
В новом результате берём прежнее количество через get(name, 0), прибавляем очередное. Исходные словари не меняем. Ключи с разным регистром при необходимости нормализуем заранее.
first = {"яблоки": 2, "хлеб": 1}second = {"яблоки": 3, "молоко": 1}result = first.copy()for name, count in second.items(): result[name] = result.get(name, 0) + countprint(result)Где легко ошибиться
- Путать имя ключа с переменной без кавычек.
- Считать, что get создаёт отсутствующий ключ.
- Заменить количество при объединении вместо сложения.
Проверь понимание: Изменит ли hero.get("level", 1) сам словарь?
Нет. Метод вернёт значение ключа или 1, но не добавит поле.
