← Все вопросы
Как удалить из словаря все пары по условию (получить новый словарь)?
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 условие}.
Ваш ответ
Войдите, чтобы ответить на вопрос.