Удалите элемент словаря, если ключ существует
Есть ли другой способ удалить элемент в словаре, только если данный ключ существует, кроме:
if key in mydict:
del mydict[key]
Сценарий заключается в том, что мне предоставляется коллекция ключей, которые нужно удалить из данного словаря, но я не уверен, что все они существуют в словаре. На всякий случай я пропустил более эффективное решение.
Ответы
Ответ 1
Вы можете использовать dict.pop
:
mydict.pop("key", None)
Обратите внимание, что если второй аргумент, т.е. None
не указан, KeyError
возникает, если ключ не находится в словаре. Предоставление второго аргумента предотвращает условное исключение.
Ответ 2
Существует также:
try:
del mydict[key]
except KeyError:
pass
Это только 1 поиск вместо 2. Однако предложения except
являются дорогостоящими, поэтому, если вы часто нажимаете предложение except, это, вероятно, будет менее эффективным, чем то, что у вас уже есть.
Ответ 3
Подход: вычислять ключи для удаления, мутировать dict
Позвоните keys
список/итератор ключей, которые вы хотите удалить. Я бы сделал это:
keys_to_remove = set(keys).intersection(set(mydict.keys()))
for key in keys_to_remove:
del mydict[key]
Вы вычисляете перед всеми затронутыми предметами и работаете с ними.
Подход: вычисляйте ключи, чтобы сохранить, введите новый dict с этими клавишами
Я предпочитаю создавать новый словарь для мутирования существующего, поэтому я, вероятно, также подумал бы об этом:
keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: v for k, v in mydict.iteritems() if k in keys_to_keep}
или
keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: mydict[k] for k in keys_to_keep}