Python: уроки, справочник и задачи

Методы словаря dict в Python с примерами

Раздел: Словари в Python · Обновлено 31.10.2026

Встроенные методы словаря Python позволяют безопасно читать значения, добавлять и объединять данные, удалять ключи и создавать копии. Ниже собрана сводная таблица всех одиннадцати методов dict, а затем каждый разобран на коротком примере с результатом и типичными ловушками.

Методы словаря dict в Python с примерами
Фото: MatthewHoobin / CC BY-SA 4.0, Wikimedia Commons
Содержание статьи
  1. Сводная таблица методов dict
  2. Чтение данных: get, keys, values, items
  3. Добавление и изменение: update и setdefault
  4. Удаление: pop, popitem и clear
  5. Создание и копирование: fromkeys и copy
  6. Частые вопросы
    1. Чем get() отличается от setdefault()?
    2. Почему d = d.update(...) превращает словарь в None?
    3. Как проверить, есть ли ключ в словаре?
    4. Как удалить ключ во время перебора словаря?

Сводная таблица методов dict

У словаря одиннадцать обычных методов. Таблица помогает быстро найти нужный по задаче, подробности о каждом ниже.

МетодЧто делаетЧто возвращает
get(key, default=None)Читает значение без ошибки при отсутствии ключаЗначение или default
keys()Дает все ключиПредставление dict_keys
values()Дает все значенияПредставление dict_values
items()Дает пары ключ-значениеПредставление dict_items
update(other)Добавляет и перезаписывает пары из другого словаряNone
setdefault(key, default=None)Добавляет ключ, только если его нетТекущее значение ключа
pop(key[, default])Удаляет ключУдаленное значение
popitem()Удаляет последнюю добавленную паруКортеж (key, value)
clear()Удаляет все элементыNone
copy()Создает поверхностную копиюНовый словарь
dict.fromkeys(keys, value=None)Создает словарь из набора ключейНовый словарь

Полный список с описанием сигнатур можно получить прямо в консоли: help(dict). Сами словари, их создание и ограничения на ключи разобраны в статье о словарях в Python.

Чтение данных: get, keys, values, items

Обращение d[key] к отсутствующему ключу вызывает KeyError. Метод get() в такой ситуации возвращает None или значение, переданное вторым аргументом.

user = {'name': 'Анна', 'age': 27}

print(user.get('name'))          # Анна
print(user.get('city'))          # None
print(user.get('city', 'Москва'))  # Москва
print(user)                      # {'name': 'Анна', 'age': 27}

Обратите внимание: get() ничего не добавляет в словарь, значение по умолчанию только возвращается.

Методы keys(), values() и items() возвращают не списки, а представления. Они не копируют данные и сразу отражают изменения словаря.

stock = {'яблоки': 12, 'груши': 5}
keys = stock.keys()
stock['сливы'] = 8
print(keys)                 # dict_keys(['яблоки', 'груши', 'сливы'])
print(sum(stock.values()))  # 25

for fruit, qty in stock.items():
    print(f"{fruit}: {qty}")
# яблоки: 12
# груши: 5
# сливы: 8

Представления ключей и пар поддерживают операции множеств: a.keys() & b.keys() вернет общие ключи двух словарей. Если нужен именно список, оберните результат в list(). Индексации у представлений нет, stock.keys()[0] вызовет TypeError.

Добавление и изменение: update и setdefault

Метод update() принимает другой словарь, итерируемый набор пар или именованные аргументы. Существующие ключи перезаписываются, новые добавляются. Метод меняет словарь на месте и возвращает None.

settings = {'theme': 'light', 'lang': 'ru'}
settings.update({'theme': 'dark', 'font': 14})
settings.update(lang='en')
print(settings)  # {'theme': 'dark', 'lang': 'en', 'font': 14}

defaults = {'theme': 'light', 'size': 'M'}
merged = defaults | {'size': 'L'}   # Python 3.9+
print(merged)    # {'theme': 'light', 'size': 'L'}

Оператор | работает как update(), но создает новый словарь и не трогает исходные. Вариант |= обновляет словарь на месте.

Метод setdefault() полезен, когда значение нужно и прочитать, и при отсутствии создать. Если ключ есть, он возвращает текущее значение и ничего не меняет. Если ключа нет, добавляет его с указанным значением.

words = ['кот', 'кит', 'дом', 'дуб', 'код']
groups = {}
for w in words:
    groups.setdefault(w[0], []).append(w)
print(groups)  # {'к': ['кот', 'кит', 'код'], 'д': ['дом', 'дуб']}

Без setdefault() пришлось бы писать проверку if w[0] not in groups на каждом шаге. Для той же задачи в модуле collections есть класс defaultdict, который создает значение по умолчанию автоматически.

Удаление: pop, popitem и clear

Метод pop() удаляет ключ и возвращает его значение. Без второго аргумента отсутствующий ключ вызывает KeyError, с ним ошибки не будет.

cart = {'хлеб': 50, 'молоко': 90, 'сыр': 400}

price = cart.pop('сыр')
print(price, cart)          # 400 {'хлеб': 50, 'молоко': 90}
print(cart.pop('чай', 0))   # 0

last = cart.popitem()
print(last, cart)           # ('молоко', 90) {'хлеб': 50}

cart.clear()
print(cart)                 # {}

Начиная с Python 3.7 словари сохраняют порядок вставки, поэтому popitem() удаляет последнюю добавленную пару. Для пустого словаря он вызывает KeyError. Оператор del cart['хлеб'] тоже удаляет ключ, но не возвращает значение.

Метод clear() очищает тот же объект, и это видно во всех переменных, которые на него ссылаются. Присваивание cart = {} создает новый пустой словарь, а остальные ссылки продолжают указывать на старый.

Создание и копирование: fromkeys и copy

Метод класса dict.fromkeys() строит словарь из набора ключей с одинаковым значением. Он удобен для заготовок и для удаления дубликатов с сохранением порядка.

scores = dict.fromkeys(['Анна', 'Борис', 'Вера'], 0)
print(scores)  # {'Анна': 0, 'Борис': 0, 'Вера': 0}

unique = list(dict.fromkeys([3, 1, 3, 2, 1]))
print(unique)  # [3, 1, 2]

bad = dict.fromkeys(['a', 'b'], [])
bad['a'].append(1)
print(bad)     # {'a': [1], 'b': [1]}

Последний пример показывает ловушку: всем ключам достается один и тот же список. Если значение изменяемое, создавайте словарь генератором: {k: [] for k in keys}.

Метод copy() делает поверхностную копию. Сам словарь новый, но вложенные списки и словари общие с оригиналом. Для полной независимой копии используйте copy.deepcopy().

import copy

original = {'name': 'Иван', 'tags': ['python']}
shallow = original.copy()
deep = copy.deepcopy(original)

shallow['tags'].append('sql')
print(original['tags'])  # ['python', 'sql']
print(deep['tags'])      # ['python']

Методы, которые не меняют словарь, а только возвращают данные, удобно сочетать с функцией sorted(); примеры есть в статье о сортировке словаря. Еще больше практических приемов собрано на странице методов словаря, а формальное описание типа есть в документации Python.

Частые вопросы

Ответы на вопросы, которые чаще всего возникают при работе с методами словаря.

Чем get() отличается от setdefault()?

Оба возвращают значение по умолчанию, если ключа нет. Но get() словарь не меняет, а setdefault() добавляет в него отсутствующий ключ.

Почему d = d.update(...) превращает словарь в None?

Метод update() меняет словарь на месте и возвращает None. Вызывайте его без присваивания или используйте оператор d | other, который возвращает новый словарь.

Как проверить, есть ли ключ в словаре?

Используйте оператор in: 'name' in user. Устаревший метод has_key() был удален еще в Python 3. Проверка in работает по ключам, для значений пишут x in d.values().

Как удалить ключ во время перебора словаря?

Изменять размер словаря внутри цикла по нему нельзя, будет RuntimeError. Перебирайте копию ключей for k in list(d): или соберите новый словарь генератором.