文法・環境

【python】辞書(dict)の要素の削除【del、pop、popitem、clearなど】

pythonの辞書の要素の削除方法について紹介します

del文、popメソッドなど、辞書の要素を削除する方法はいくつかあるので、それぞれの方法についてサンプルコードを交えながら紹介します。

この記事で分かること

■基本的な辞書の要素の削除方法

  • del : キーを指定して辞書の要素を削除
  • pop : キーを指定して辞書の要素を削除し、値を取得
  • popitem : 辞書の要素を削除し、キーと値を取得
  • clear : 辞書のすべての要素を削除

■辞書の要素の削除に関する、その他の例

  • 値を指定して、辞書の要素を削除
  • 値がNoneの場合、辞書の要素を削除
  • 値が重複した場合、辞書の要素を削除

スポンサーリンク

del : キー(key)を指定して辞書の要素を削除

はじめに、del文を用いて辞書の要素を削除する方法を紹介します。

del文を使用すると、辞書のキーを指定して要素を削除できます

書き方

del 辞書[ ' キー ' ]

以下、サンプルコードです。

### del文 : キーを指定して、辞書の要素を削除
fruits_dict= {'Apple':100, 'Banana':200, 'Grape':500, 'Orange':100}
print(fruits_dict)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Orange': 100}

del fruits_dict['Banana']
print(fruits_dict)
# {'Apple': 100, 'Grape': 500, 'Orange': 100}

キーを複数指定すると、複数の要素を削除できます

以下、サンプルコードです。

### del文 : 複数のキーを指定して、辞書の要素を削除
fruits_dict= {'Apple':100, 'Banana':200, 'Grape':500, 'Orange':100}
print(fruits_dict)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Orange': 100}

del fruits_dict['Banana'], fruits_dict['Grape']
print(fruits_dict)
# {'Apple': 100, 'Orange': 100}

存在しないキーを指定すると、エラー停止します。

### del文 : 存在しないキーを指定
fruits_dict= {'Apple':100, 'Banana':200, 'Grape':500, 'Orange':100}
print(fruits_dict)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Orange': 100}

del fruits_dict['Peach']
print(fruits_dict)
# KeyError: 'Peach'

存在しないキーを誤って指定してしまった際にエラー停止させたくない場合は、
例外処理をすればエラー停止を回避できます。

以下、例外処理をしたサンプルコードです。

### del文 : 存在しないキーを指定した場合に、エラー停止しないように例外処理
fruits_dict= {'Apple':100, 'Banana':200, 'Grape':500, 'Orange':100}
print(fruits_dict)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Orange': 100}

del_key = 'Peach'

try :
    del fruits_dict[del_key]
except KeyError :
    print('存在しないキーです')
    
print(fruits_dict)
# 存在しないキーです
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Orange': 100}

try文を用いて、例外処理をしています。

KeyErrorが発生した際の処理を、except節に記述しています。

例外処理については、下記記事で紹介しています。

例外処理の基本【try except】

スポンサーリンク

pop : キー(key)を指定して辞書の要素を削除し、値(value)を取得

次に、辞書のpopメソッドの使い方について紹介します。

popメソッドを使用すると、辞書のキーを指定して要素を削除したうえで、値を取得できます

書き方

値 = 辞書.pop( ' キー ' , default )

「default」は省略可能です。
「default」には、指定したキーが存在しない場合の返り値を指定できます。

以下、辞書のpopメソッドのサンプルコードです。

### popメソッド : キーを指定して辞書の要素を削除し、値を取得
fruits_dict= {'Apple':100, 'Banana':200, 'Grape':500, 'Orange':100}
print(fruits_dict)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Orange': 100}

val = fruits_dict.pop('Banana')
print(fruits_dict)
# {'Apple': 100, 'Grape': 500, 'Orange': 100}
print(val)
# 200

存在しないキーを指定すると、エラー停止します。

### popメソッド : 存在しないキーを指定
fruits_dict= {'Apple':100, 'Banana':200, 'Grape':500, 'Orange':100}
print(fruits_dict)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Orange': 100}

val = fruits_dict.pop('Peach')
print(fruits_dict)
# KeyError: 'Peach'

存在しないキーを誤って指定してしまった際にエラー停止させたくない場合は、
default値を指定すればエラー停止を回避できます。

以下、default値にNoneを指定したサンプルコードです。

### popメソッド : 存在しないキーを指定した場合に、エラー停止しないようにdefaultを指定
fruits_dict= {'Apple':100, 'Banana':200, 'Grape':500, 'Orange':100}
print(fruits_dict)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Orange': 100}

val = fruits_dict.pop('Peach', None)
print(fruits_dict)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Orange': 100}
print(val)
# None

popitem : 辞書の要素を削除し、キー(key)と値(value)を取得

次に、辞書のpopitemメソッドの使い方について紹介します。

popitemメソッドを使用すると、辞書の要素を削除したうえで、キーと値を取得できます

書き方

辞書.popitem( )

なお、Python3.6までは削除される要素はランダムでしたが、
Python3.7以降の辞書が要素の順序を保証するようになった変更に伴い、必ず最後の要素を削除するようになりました。

以下、popitemメソッドを用いて辞書の要素を削除するサンプルコードです。

### popitemメソッド : 辞書の要素を削除し、キーと値を取得
fruits_dict= {'Apple':100, 'Banana':200, 'Grape':500}
print(fruits_dict)
# {'Apple': 100, 'Banana': 200, 'Grape': 500}

fruit, price = fruits_dict.popitem()
print(fruits_dict)
# {'Apple': 100, 'Banana': 200}
print(fruit)
# Grape
print(price)
# 500

clear : 辞書のすべての要素を削除

次に、辞書のclearメソッドの使い方について紹介します。

clearメソッドを使用すると、辞書のすべての要素を削除できます

書き方

辞書.clear( )

以下、clearメソッドで辞書の要素をすべて削除するサンプルコードです。

### clearメソッド : 辞書のすべての要素を削除
fruits_dict = {'Apple':100, 'Banana':200, 'Grape':500}
print(fruits_dict)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Orange': 100}

fruits_dict.clear()
print(fruits_dict)
# {}

ここまで、辞書の要素を削除するdel文や、popメソッドなどの使い方について紹介してきました。

以降では、辞書の要素の削除に関して、より実践的な例をいくつか紹介します。

スポンサーリンク

値(value)を指定して、辞書の要素を削除

値を指定して、辞書の要素を削除する方法を紹介します。

以下、値が500の場合は要素を削除するサンプルコードです。

辞書内包表記内で、値が500かどうか判定しています。

### 値を指定して、辞書の要素を削除
fruits_dict1 = {'Apple':100, 'Banana':200, 'Grape':500}
print(fruits_dict1)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Orange': 100}

fruits_dict2 = {fruit:price for fruit, price in fruits_dict1.items() if price != 500}
print(fruits_dict2)
# {'Apple': 100, 'Banana': 200}

> fruits_dict2 = {fruit : price for fruit, price in fruits_dict1.items() if price != 500}

辞書内包表記で記載しています。

" fruit, price in fruits_dict1.items() " の部分では、辞書のitemsメソッドを用いて、辞書のキーと値をすべて取り出し、それぞれfruit、priceに1つずつ渡しています。

" if price != 500 " の条件式で、priceが500ではないか判定しています。500以外の場合、条件式がTrueになります。

条件式がTrueの場合、" fruit : price " の部分をキーと値とした、新たな辞書が作成されます。

内包表記については、下記の記事で紹介しています。

内包表記の使い方

辞書のitemsメソッドの使い方については、下記の記事で紹介しています。

辞書のキーと値の取得方法

値(value)がNoneの場合、辞書の要素を削除

値がNoneの場合に、辞書の要素を削除する方法を紹介します。

以下、辞書の値がNoneだった場合に、要素を削除するサンプルコードです。

前述の例の条件式を、" if price is not None " に変更しているだけです。

### 値がNoneの場合、辞書の要素を削除
fruits_dict1 = {'Apple':100, 'Banana':None, 'Grape':500, 'Lemon':150, 'Orange':None }
print(fruits_dict1)
# {'Apple': 100, 'Banana': None, 'Grape': 500, 'Lemon': 150, 'Orange': None}

fruits_dict2 = {fruit:price for fruit, price in fruits_dict1.items() if price is not None}
print(fruits_dict2)
# {'Apple': 100, 'Grape': 500, 'Lemon': 150}

スポンサーリンク

値(value)が重複した場合、辞書の要素を削除

次に、値が重複した場合に、辞書の要素を削除する方法を紹介します。

以下、値が重複していた場合、辞書の要素を削除するサンプルコードです。

辞書のitemsメソッドで、すべてのキーと値を取り出し、値だけを格納したリストを作成します。
その値のリストと辞書の値を比較しながら、値の重複がないかチェックしています。

### 辞書の値が重複した場合、要素を削除
fruits_dict1 = {'Apple':100, 'Banana':200, 'Grape':500, 'Lemon':150, 'Orange':100 }
print(fruits_dict1)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Lemon': 150, 'Orange': 100}

price_list = []
fruits_dict2 = dict()
for fruit, price in fruits_dict1.items() :
    if price not in price_list:
        price_list.append(price)
        fruits_dict2[fruit] = price
    
print(fruits_dict2)
# {'Apple': 100, 'Banana': 200, 'Grape': 500, 'Lemon': 150}

> price_list = []
辞書の値を格納するための空のリストを作成します。

> fruits_dict2 = dict( )
値が重複しない場合に、新たな辞書として要素を格納するための空の辞書をdict関数で作成しています。

> for fruit, price in fruits_dict1.items() :
> if price not in price_list:
> price_list.append(price)
> fruits_dict2[fruit] = price
itemsメソッドで、辞書のすべてのキーと値を取り出し、fruitとpriceに渡しています。
if文では、priceが値のリストに含まれないか(重複していないか)確認しています。
値が重複していない場合、if文の中に入ります。
" price_list.append(price) " の部分で、priceを値のリストに追加し、次の要素の重複判定に利用します。
" fruits_dict2[fruit] = price " の部分で、新たな辞書に要素を追加しています。

スポンサーリンク

まとめ

pythonの辞書の要素の削除方法について紹介しました。

要素の削除方法は、辞書を扱ううえで必須なので、基本的な操作方法は覚えておくようにしましょう。

また、内包表記などの記述方法も使えると役立つ場面が多いので、併せて覚えておきましょう。

スポンサーリンク

スポンサーリンク

-文法・環境
-