Словари: ключи, значения, добавление и обновление

Словари: ключи, значения, добавление и обновление

Списки хранят элементы по индексу (0, 1, 2...). Но часто нужно хранить данные по имени: «имя» → «Алиса», «возраст» → 25, «город» → «Москва». Для таких задач Python предоставляет словарь (dict) — коллекцию пар ключ-значение.

Что такое словарь

Словарь — это коллекция пар ключ: значение. Ключи уникальны; значения могут повторяться. Словарь изменяемый и начиная с Python 3.7 — упорядоченный (элементы хранятся в порядке добавления).

person = {
    "name": "Алиса",
    "age": 25,
    "city": "Москва"
}

print(person)   # {'name': 'Алиса', 'age': 25, 'city': 'Москва'}
print(type(person))   # <class 'dict'>

Создание словаря

# Литерал:
empty = {}
scores = {"Alice": 92, "Bob": 85, "Carol": 97}

# Через dict():
config = dict(host="localhost", port=8080, debug=True)

# Из списка пар:
pairs = [("a", 1), ("b", 2), ("c", 3)]
d = dict(pairs)
print(d)   # {'a': 1, 'b': 2, 'c': 3}

Ключи: требования

Ключи должны быть неизменяемыми типами: строки, числа, кортежи. Списки как ключи — нельзя:

valid = {1: "один", "two": 2, (3, 4): "кортеж"}   # все допустимы

# invalid = {[1, 2]: "список"}   # TypeError: unhashable type: 'list'

Доступ по ключу

person = {"name": "Алиса", "age": 25}

print(person["name"])   # Алиса
print(person["age"])    # 25

# Несуществующий ключ вызывает KeyError:
# print(person["email"])   # KeyError: 'email'

Метод get() возвращает значение или None (или default) вместо ошибки:

print(person.get("email"))           # None
print(person.get("email", "N/A"))    # N/A (default)
print(person.get("name", "N/A"))     # Алиса

Добавление и обновление

Присваивание по ключу: если ключ существует — обновляет значение; если нет — добавляет:

person = {"name": "Алиса", "age": 25}

person["city"] = "Москва"      # добавить новый ключ
person["age"] = 26             # обновить существующий
print(person)
# {'name': 'Алиса', 'age': 26, 'city': 'Москва'}

Метод update() обновляет несколько пар сразу:

person.update({"age": 27, "email": "alice@example.com"})
print(person)
# {'name': 'Алиса', 'age': 27, 'city': 'Москва', 'email': 'alice@example.com'}

Удаление элементов

d = {"a": 1, "b": 2, "c": 3, "d": 4}

# del — удалить по ключу:
del d["b"]
print(d)   # {'a': 1, 'c': 3, 'd': 4}

# pop() — удалить и вернуть значение:
val = d.pop("c")
print(val)   # 3
print(d)     # {'a': 1, 'd': 4}

# pop() с default — не вызывает KeyError:
val2 = d.pop("z", "нет такого")
print(val2)  # нет такого

# clear() — очистить словарь:
d.clear()
print(d)   # {}

Проверка наличия ключа

Оператор in проверяет ключи (не значения):

person = {"name": "Алиса", "age": 25}

print("name" in person)    # True
print("email" in person)   # False
print("Алиса" in person)   # False — проверяются ключи, не значения!

setdefault: установить если нет

setdefault(key, default) возвращает значение по ключу. Если ключа нет — добавляет его с default и возвращает default:

counter = {}
counter.setdefault("python", 0)
counter["python"] += 1
counter.setdefault("python", 0)  # ключ уже есть — не обнуляет
counter["python"] += 1
print(counter)   # {'python': 2}

Это удобный паттерн для счётчиков и группировки.

Длина и информация

person = {"name": "Алиса", "age": 25, "city": "Москва"}

print(len(person))         # 3 — количество пар
print(list(person.keys()))     # ['name', 'age', 'city']
print(list(person.values()))   # ['Алиса', 25, 'Москва']

Проверь себя

Что выведет следующий код?

d = {"x": 10, "y": 20}
d["z"] = 30
d["x"] = 99
print(d.get("w", 0))
print(len(d))
  • d["z"] = 30 → добавляет z
  • d["x"] = 99 → обновляет x
  • d.get("w", 0) → ключа w нет → 0
  • len(d) → 3 ключа: x, y, z

Вывод: 0, затем 3.

Итог

  • Словарь — коллекция пар ключ: значение; ключи уникальны и неизменяемы.
  • Доступ: d[key] (KeyError если нет) или d.get(key, default) (безопасно).
  • Добавление/обновление: d[key] = value; удаление: del d[key] или d.pop(key).
  • update() обновляет несколько пар сразу.
  • in проверяет ключи, не значения.
  • setdefault() удобен для счётчиков и инициализации.

В следующем уроке разберём, как перебирать словари через items(), keys(), values().

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике