Чтобы удалить ключ из словаря Python, используйте оператор del d[key], когда ключ точно есть, или метод d.pop(key, default), когда ключа может не быть — pop со значением по умолчанию не бросает KeyError. Для удаления по условию подойдёт dict comprehension, а чтобы очистить словарь целиком — метод clear().

  • del d[key] — удаляет ключ на месте, ничего не возвращает, при отсутствии ключа бросает KeyError.
  • pop(key, default) — удаляет и возвращает значение; с default безопасен, без него бросает KeyError.
  • popitem() — удаляет и возвращает последнюю добавленную пару (LIFO), на пустом словаре — KeyError.
  • dict comprehension — собирает новый словарь без ненужных ключей, удобно для условий и пакетного удаления.
  • clear() — удаляет все ключи, оставляя пустой словарь.

Как удалить ключ из словаря Python оператором del

По данным docs.python.org.

Оператор del — самый короткий способ удалить ключ из словаря. Он работает на месте, ничего не возвращает и просто убирает пару ключ-значение. Если ключа в словаре нет, интерпретатор бросает KeyError — это поведение зафиксировано в документации Python.

my_dict = {'a': 1, 'b': 2, 'c': 3} del my_dict['b'] # my_dict -> {'a': 1, 'c': 3} del my_dict['x'] # KeyError: 'x'

Чтобы не ловить исключение, проверяйте наличие ключа заранее через in:

if 'x' in my_dict: del my_dict['x']

Итог: del берут, когда значение удаляемого ключа не нужно и вы уверены, что ключ существует.

ОНЛАЙН-ПРАКТИКУМ
ЗАПУСК нейросети DEEPSEEK R1 ЛОКАЛЬНО НА СВОЕМ КОМПЬЮТЕРЕ
ЧТО БУДЕТ НА ОБУЧЕНИИ?
  • ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросети DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
  • Где и как применять? Потестируем модель после установки на разных задачах
  • Как дообучить модель под себя?

Метод pop(): удалить ключ из словаря и получить значение

Метод pop() удаляет ключ и возвращает его значение. Главное преимущество перед del — второй аргумент, значение по умолчанию: если ключа нет, pop вернёт его вместо KeyError. Это делает метод безопасным способом удаления ключа из словаря без предварительной проверки.

my_dict = {'a': 1, 'b': 2, 'c': 3} value = my_dict.pop('b') # value = 2, ключ удалён missing = my_dict.pop('x', None) # missing = None, KeyError не возникает crash = my_dict.pop('x') # KeyError: 'x' — default не задан

Итог: pop — рабочая лошадка, когда нужно и удалить ключ, и забрать его значение, или когда ключ может отсутствовать.

Метод popitem(): удалить последний добавленный ключ

Метод popitem() удаляет и возвращает пару (key, value). Начиная с Python 3.7 порядок элементов словаря гарантирован спецификацией языка, поэтому popitem() работает по принципу LIFO — забирает последний добавленный элемент. Сам метод существовал и в ранних версиях, но до 3.7 порядок был деталью реализации, а не гарантией. На пустом словаре метод бросает KeyError.

my_dict = {'a': 1, 'b': 2, 'c': 3} item = my_dict.popitem() # item = ('c', 3), my_dict -> {'a': 1, 'b': 2} {}.popitem() # KeyError: 'popitem(): dictionary is empty'

Итог: popitem удобен, когда важно снять именно последний по вставке элемент — например, при разборе стека или отмене последнего действия.

Метод clear(): удалить все ключи из словаря

Когда нужно удалить все ключи разом, применяют clear(). Метод очищает словарь на месте, возвращает None и не бросает исключений даже на уже пустом словаре. Важно: clear() меняет тот же объект, поэтому все ссылки на словарь увидят пустой результат.

my_dict = {'a': 1, 'b': 2, 'c': 3} alias = my_dict my_dict.clear() # my_dict -> {}, alias -> {} (тот же объект)

Если нужно обнулить только одну переменную, не трогая другие ссылки, присвойте новый словарь: my_dict = {}.

Как удалить несколько ключей из словаря сразу

Для пакетного удаления соберите список ключей и пройдитесь по нему методом pop с дефолтом — так лишние ключи не свалят программу KeyError.

my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4} for key in ('b', 'd', 'z'): my_dict.pop(key, None) # my_dict -> {'a': 1, 'c': 3}

Итог: перебор с pop(key, None) — самый предсказуемый способ убрать набор ключей, часть которых может отсутствовать.

Как удалить ключи по условию через dict comprehension

Когда удалять нужно не по имени, а по правилу (по значению, префиксу, типу), собирают новый словарь генератором, оставляя только подходящие пары. Это не удаление на месте — создаётся новый объект, зато код читается одной строкой.

my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4} # оставить только значения > 2 (удалить остальные) my_dict = {k: v for k, v in my_dict.items() if v > 2} # my_dict -> {'c': 3, 'd': 4} # удалить по списку ключей drop = {'b', 'd'} my_dict = {k: v for k, v in my_dict.items() if k not in drop}

Итог: comprehension — выбор для условной и массовой фильтрации, когда допустимо пересоздать словарь.

Частая ошибка: удаление ключей во время итерации

Самая распространённая ловушка — менять словарь прямо в цикле по нему. Python бросит RuntimeError: dictionary changed size during iteration, потому что размер контейнера изменился под итератором.

my_dict = {'a': 1, 'b': 2, 'c': 3} for key in my_dict: if my_dict[key] == 2: del my_dict[key] # RuntimeError: dictionary changed size during iteration

Решение — итерировать по копии ключей или собрать новый словарь генератором:

# вариант 1: копия ключей через list() for key in list(my_dict): if my_dict[key] == 2: del my_dict[key] # вариант 2: пересборка (безопаснее и быстрее на больших словарях) my_dict = {k: v for k, v in my_dict.items() if v != 2}

Итог: никогда не удаляйте ключи, перебирая сам словарь — берите list(my_dict) или comprehension.

Как удалить ключ из вложенного словаря

Во вложенных структурах удаляют так же — del или pop, но сначала нужно добраться до внутреннего словаря. Если путь может не существовать, безопаснее идти через get и pop с дефолтом, чтобы не поймать KeyError на промежуточном уровне.

data = {'user': {'name': 'Ann', 'token': 'abc'}} # прямое удаление, когда путь точно есть del data['user']['token'] # безопасно, если промежуточного ключа может не быть data.get('user', {}).pop('token', None)

Итог: во вложенных словарях сначала достаём нужный уровень, и только потом применяем del или pop.

Сравнение методов удаления ключей из словаря

Метод Возвращает Если ключа нет Удаляет на месте Когда использовать
del d[key] ничего KeyError да ключ точно есть, значение не нужно
d.pop(key) значение KeyError да нужно забрать значение
d.pop(key, default) значение или default вернёт default да ключ может отсутствовать
d.popitem() пара (key, value) KeyError на пустом да снять последний добавленный
dict comprehension новый словарь ничего (пропускает) нет удаление по условию / пакетно
d.clear() None да очистить весь словарь

Производительность: какой способ удаления быстрее

Разница на практике заметна только на больших словарях, но логика простая. Операции del, pop и popitem работают напрямую с хеш-таблицей и выполняются за амортизированное O(1) — они меняют существующий объект, не копируя его. Dict comprehension удаляет ключи ценой O(n): он проходит по всем парам и создаёт новый словарь, поэтому на большой коллекции медленнее и тратит дополнительную память.

Практический вывод: для точечного удаления одного-двух ключей берите del или pop. Comprehension оправдан, когда удаляете по условию или сразу много ключей — читаемость важнее микросекунд. Для полной очистки clear() дешевле, чем пересоздавать словарь генератором.

Какой метод удаления ключа выбрать

Выбор метода удаления ключа: del vs pop vs comprehension
Выбор метода удаления ключа: del vs pop vs comprehension

Короткое правило выбора: нужно значение удаляемого ключа — pop(); ключ может отсутствовать — pop(key, default); ключ точно есть и значение не нужно — del; удаляете по условию или пачкой — dict comprehension; чистите весь словарь — clear(). Схема-подсказка ниже проводит по этим развилкам за несколько шагов.

Разобраться с такими структурами данных на реальных задачах помогают практические курсы по Python — на них разбирают не только словари, но и типичные ошибки вроде удаления во время итерации.

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

Что вернёт pop, если ключа нет в словаре?

Если вызвать d.pop(key) без второго аргумента и ключа нет — будет KeyError. Если передать значение по умолчанию, например d.pop(key, None), метод вернёт это значение, а словарь не изменится.

Чем del отличается от pop при удалении ключа?

del d[key] просто удаляет пару и ничего не возвращает. pop удаляет и возвращает значение, а с аргументом по умолчанию ещё и защищает от KeyError. Если значение не нужно и ключ точно есть — del короче.

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

Не итерируйте по самому словарю при удалении. Пройдите по копии ключей for key in list(my_dict) или пересоберите словарь через comprehension {k: v for k, v in my_dict.items() if условие} — иначе Python бросит RuntimeError: dictionary changed size during iteration.

Как удалить сразу несколько ключей из словаря?

Соберите ключи в список или множество и пройдитесь for key in keys: my_dict.pop(key, None). Дефолт None нужен, чтобы отсутствующий ключ не вызвал KeyError. Для удаления по условию используйте dict comprehension.

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

Метод d.clear() удаляет все ключи и оставляет тот же объект пустым — это увидят все ссылки на него. Если нужно обнулить только одну переменную, присвойте новый словарь: d = {}.

Метод popitem удаляет случайный ключ?

Нет. С Python 3.7 порядок вставки гарантирован, и popitem() всегда снимает последний добавленный элемент (LIFO). На пустом словаре метод бросает KeyError.

Материал подготовила редакция Зерокодера. Примеры проверены на CPython 3.12; поведение методов сверено с официальной документацией Python.

Большой практикум
ЗАМЕНИ ВСЕ НЕЙРОСЕТИ НА ОДНУ — PERPLEXITY
ПОКАЖЕМ НА КОНКРЕТНЫХ КЕЙСАХ
  • Освой нейросеть Perplexity и узнай, как пользоваться функционалом остальных ИИ в одном
  • УЧАСТВОВАТЬ ЗА 0 РУБ.
  • Расскажем, как получить подписку
Участвовать бесплатно
ОНЛАЙН-ПРАКТИКУМ
ЗАПУСК нейросети DEEPSEEK R1 ЛОКАЛЬНО НА СВОЕМ КОМПЬЮТЕРЕ
ЧТО БУДЕТ НА ОБУЧЕНИИ?
  • ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросеть DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
Участвовать бесплатно