note.nkmk.me

Pythonで辞書の要素を削除するclear, pop, popitem, del

Posted: 2018-04-13 / Modified: 2021-09-18 / Tags: Python, 辞書

Pythonで辞書(dict型オブジェクト)の要素を削除するには以下の方法がある。

  • すべての要素を削除(初期化): clear()メソッド
  • キーを指定して要素を削除し、値を返す: pop()メソッド
  • 要素を削除し、キーと値を返す: popitem()メソッド
  • キーを指定して要素を削除(複数指定可): del
  • 条件を満たす要素を削除・抽出: 辞書内包表記

それぞれについて説明する。

辞書に要素を追加する方法については以下の記事を参照。

スポンサーリンク

辞書のすべての要素を削除(初期化): clear()メソッド

clear()メソッドを呼ぶと辞書オブジェクトのすべての要素が削除(初期化)され、空の辞書になる。

d = {'k1': 1, 'k2': 2, 'k3': 3}

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

辞書のキーを指定して要素を削除し、値を返す: pop()メソッド

pop()メソッドは引数にキーkeyを指定してその要素を削除し、削除された値valueを返す。

d = {'k1': 1, 'k2': 2, 'k3': 3}

removed_value = d.pop('k1')
print(d)
# {'k2': 2, 'k3': 3}

print(removed_value)
# 1

デフォルトでは存在しないキーを指定するとエラー(KeyError例外)となる。

d = {'k1': 1, 'k2': 2, 'k3': 3}

# removed_value = d.pop('k4')
# print(d)
# KeyError: 'k4'

第二引数を指定するとキーが存在しない場合にその値を返す。辞書オブジェクト自体は変化なし。

d = {'k1': 1, 'k2': 2, 'k3': 3}

removed_value = d.pop('k4', None)
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}

print(removed_value)
# None

辞書の要素を削除し、キーと値を返す: popitem()メソッド

popitem()メソッドは辞書の要素を削除し、そのキーkeyと値valueのタプル(key, value)を返す。どの要素を削除するかは指定できない。

空の辞書オブジェクトに対してはエラー(KeyError例外)となる。

d = {'k1': 1, 'k2': 2}

k, v = d.popitem()
print(k)
print(v)
print(d)
# k2
# 2
# {'k1': 1}

k, v = d.popitem()
print(k)
print(v)
print(d)
# k1
# 1
# {}

# k, v = d.popitem()
# KeyError: 'popitem(): dictionary is empty'

辞書のキーを指定して要素を削除(複数指定可): del文

del文を使って辞書の要素を削除することも可能。

辞書オブジェクト[キー]の形で指定する。

d = {'k1': 1, 'k2': 2, 'k3': 3}

del d['k2']
print(d)
# {'k1': 1, 'k3': 3}

複数の要素を指定できる。

d = {'k1': 1, 'k2': 2, 'k3': 3}

del d['k1'], d['k3']
print(d)
# {'k2': 2}

存在しないキーkeyを指定するとエラー(KeyError例外)となる。

d = {'k1': 1, 'k2': 2, 'k3': 3}

# del d['k4']
# print(d)
# KeyError: 'k4'

条件を満たす要素を削除・抽出: 辞書内包表記

辞書から条件を満たす要素を削除するにはリスト内包表記の辞書版である辞書内包表記を使う。

「条件を満たす要素を削除」する処理は「条件を満たさない要素を抽出」する処理と同じなので、例えば、「値valueが奇数の要素を削除」するには「値valueが偶数の要素を抽出」すればよい。逆も同様。

d = {'apple': 1, 'banana': 10, 'orange': 100}

dc = {k: v for k, v in d.items() if v % 2 == 0}
print(dc)
# {'banana': 10, 'orange': 100}

dc = {k: v for k, v in d.items() if v % 2 == 1}
print(dc)
# {'apple': 1}

辞書のitems()メソッドでキーkeyと値valueを取り出している。

キーkeyに対して条件を指定することも可能。

dc = {k: v for k, v in d.items() if k.endswith('e')}
print(dc)
# {'apple': 1, 'orange': 100}

dc = {k: v for k, v in d.items() if not k.endswith('e')}
print(dc)
# {'banana': 10}

andorを使うと複数の条件を指定できる。

dc = {k: v for k, v in d.items() if v % 2 == 0 and k.endswith('e')}
print(dc)
# {'orange': 100}
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事