Чтобы удалить ключ из словаря 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 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
- Где и как применять? Потестируем модель после установки на разных задачах
- Как дообучить модель под себя?
Метод 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() дешевле, чем пересоздавать словарь генератором.
Какой метод удаления ключа выбрать

Короткое правило выбора: нужно значение удаляемого ключа — 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 и узнай, как пользоваться функционалом остальных ИИ в одном
- УЧАСТВОВАТЬ ЗА 0 РУБ.
- Расскажем, как получить подписку
- ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросеть DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ