Python 辞書から要素を削除する方法

Aliaksei Yursha 2023年1月30日
  1. Python 辞書要素を削除するための del ステートメント
  2. Python 辞書要素を削除する dict.pop() 関数
  3. Python 辞書から複数の要素を削除する
  4. 性能特性
Python 辞書から要素を削除する方法

Python 辞書には、削除したいキーが含まれている場合があります。いくつかの異なる方法でそれを行うことができます。

Python 辞書要素を削除するための del ステートメント

1つのアプローチは、Python の組み込みの del ステートメントを使用することです。

>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> del meal['fats']
>>> meal
{'proteins': 10, 'carbohydrates': 80}

辞書にないキーで要素を削除しようとすると、
Python ランタイムは KeyError をスローします。

>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> del meal['water']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'water'

Python 辞書要素を削除する dict.pop() 関数

別のアプローチは、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}

上記のアプローチでは、渡されたキーの 1つが辞書にない場合、Python は引き続きクラッシュすることに注意してください。
この問題を回避するために、デフォルトの戻り値として dict.pop() に 2 番目の引数を与えることができます。

>>> 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 ステートメントはほぼ 2 倍高速です。

ただし、フォールバック値を持つ dict.pop() は、ランタイムエラーを回避するのに役立つため、より安全です。

辞書にキーが存在する必要があると確信している場合は前者を使用し、そうでない場合は後者を使用します。

関連記事 - Python Dictionary