Как удалить элемент из словаря Pythonа
-
Операция
del
для удаления элемента словаря Python -
Функция
dict.pop()
для удаления элемента словаря Python - Удаление нескольких элементов из словаря Python
- Эксплуатационные характеристики
Иногда ваш словарь Python содержит ключ или несколько ключей, которые вы хотите удалить. Вы можете сделать это несколькими различными способами.
Операция del
для удаления элемента словаря Python
Один из подходов заключается в использовании встроенного заявления Python del
.
>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> del meal['fats']
>>> meal
{'proteins': 10, 'carbohydrates': 80}
Обратите внимание, что если вы пытаетесь удалить элемент по ключу, которого нет в словаре,
Python runtime бросит KeyError
.
>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> del meal['water']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'water'
Функция dict.pop()
для удаления элемента словаря Python
Другой подход заключается в использовании функции dict.pop()
.
Положительная сторона этого метода заключается в том, что он позволяет указать
значение по умолчанию, которое нужно вернуть, если запрашиваемый ключ не существует.
в словаре.
>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> meal.pop('water', 3000)
3000
>>> meal.pop('fats', 3000)
10
>>> meal
{'proteins': 10, 'carbohydrates': 80}
Обратите внимание, что если вы не укажете значение по умолчанию для возврата и запрошенное значение
ключа не существует, вы также получите ошибку во время выполнения, как del
выше.
>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> meal.pop('water')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'water'
Удаление нескольких элементов из словаря Python
Если необходимо удалить несколько элементов из словаря за один заход, Python 3 предлагает удобный список понимания, который вы можете использовать для этой цели.
>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> [meal.pop(key) for key in ['fats', 'proteins']]
[10, 10]
>>> meal
{'carbohydrates': 80}
Обратите внимание, что при описанном выше подходе, Python все равно аварийно завершает работу, если один из передаваемых ключей отсутствует в словаре.
Чтобы обойти эту проблему, вы можете дать второй аргумент dict.pop()
в качестве возвращаемого значения по умолчанию.
>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> [meal.pop(key, None) for key in ['water', 'sugars']]
[None, None]
>>> meal
{'fats': 10, 'proteins': 10, 'carbohydrates': 80}
Эксплуатационные характеристики
Использование del
утверждения и dict.pop()
имеют различные характеристики производительности.
>>> from timeit import timeit
>>> timeit("meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}; del meal['fats']")
0.12977536499965936
>>> timeit("meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}; meal.pop('fats', None)")
0.21620816600079706
Как следует из приведенных выше таймингов, оператор del
почти в два раза быстрее.
Однако, dict.pop()
со значением падения является более безопасным, так как это поможет Вам избежать ошибок во время выполнения.
Используйте первое, если Вы уверены, что ключи должны присутствовать в словаре, и предпочитаете второе.