← Все вопросы

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

Задан 19 месяцев назад399 просмотров2 ответа
10

Хочу выкинуть из словаря все пары, где значение меньше нуля (или None и т.п.). Удалять прямо в цикле боюсь — вроде нельзя менять словарь во время итерации.

2 ответа

18
✓ Принятый ответ — помог автору

Не удаляй на месте — собери новый словарь через dict comprehension, оставив только нужное:

d = {k: v for k, v in d.items() if v >= 0}

Это чисто и безопасно: ты не модифицируешь словарь во время обхода. Если же нужно менять именно исходный объект (другие ссылки на него должны увидеть изменения), то сначала собери ключи на удаление в отдельный список, а потом пройди по нему: for k in [k for k, v in d.items() if v < 0]: del d[k].

Павел Дмитриев Менять словарь прямо во время for по нему — RuntimeError, так что comprehension тут лучший выбор · 18 месяцев назад
5

Comprehension с условием: {k: v for k, v in d.items() if условие}.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект