Удалить элемент справочника, если ключ существует [дубликат]
этот вопрос уже есть ответ здесь:
- Как удалить ключ из словаря Python? 8 ответов
есть ли другой способ удалить элемент в словаре, только если данный ключ существует, кроме:
if key in mydict:
del mydict[key]
сценарий заключается в том, что мне дается коллекция ключей, которые будут удалены из данного словарь, но я не уверен, что все они существуют в словаре. На случай, если я упущу более эффективное решение.
3 ответа:
можно использовать
dict.pop
:mydict.pop("key", None)
обратите внимание, что если второй аргумент, т. е.
None
не дано,KeyError
вызывается, если ключ не находится в словаре. Предоставление второго аргумента предотвращает условное исключение.
также:
try: del mydict[key] except KeyError: pass
это только делает 1 Поиск вместо 2. Однако,
except
предложения стоят дорого, поэтому, если вы в конечном итоге попадаете в предложение except часто, это, вероятно, будет менее эффективным, чем то, что у вас уже есть.
подход: вычислить ключи для удаления, мутировать dict
назовем
keys
список / итератор ключей, которые вы должны удалить. Я бы сделал так:keys_to_remove = set(keys).intersection(set(mydict.keys())) for key in keys_to_remove: del mydict[key]
вы рассчитываете заранее все затронутые элементы и работать на них.
подход: вычислить ключи, чтобы сохранить, сделать новый дикт с этими ключами
Я предпочитаю создавать новый словарь, а не мутировать существующий, поэтому я, вероятно, также рассмотрю это:
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}