#python #python-2.7
#python #python-2.7
Вопрос:
Если строка ’email’ отсутствует в значениях dict, я хочу удалить соответствующий элемент, поэтому я сделал следующее:
[ my_dict.pop(k) for k , val in my_dict.items() if 'email' not in val ]
Итак, есть ли лучшее решение для этого?
Лучше ли написать длинную строку кода, как указано выше, или выполнить следующее:
for k , val in my_dict.items():
if 'email' not in val:
my_dict.pop(k)
Ответ №1:
Не используйте понимание списка, если вы не собираетесь использовать список! Аналогично, не используйте dict.pop
, если вы не собираетесь использовать всплывающее значение. Также не рекомендуется переопределять встроенные имена, такие как dict
. Более pythonic было бы:
for key, val in my_dict.items():
if 'email' not in val:
del my_dict[key]
Комментарии:
1. Спасибо, да, я знаю, что мы не будем переопределять встроенные имена, просто я написал dict здесь в качестве примера, теперь я изменил описание
Ответ №2:
Вы удаляете на основе аспекта значения. На мой взгляд, ваш подход неплох, особенно если у вас будет мало доступной памяти.
Другим подходом было бы понимание словаря, которое должно быть немного быстрее, но требует больше памяти, поскольку вы будете копировать старый словарь в новый:
my_dict = {key: val for key, val in my_dict.items() if 'email' not in val}
Насколько я помню, подобные словарные понимания были введены в Python 2.7. В качестве альтернативы, вы также можете сделать это:
dict = my_dict([(key, val) for key, val in my_dict.items() if 'email' not in val])
Я бы рекомендовал выбирать между вашим текущим подходом и моим, исходя из ожидаемого размера словаря и ограничений памяти.