Python: ディクショナリの複数要素をまとめて削除する方法

Pythonのディクショナリ(辞書)の要素を複数削除する方法を紹介します。 forループを回しながら削除したり、 リスト内包表記を使って1行で複数要素を削除する方法があります。

forループで複数要素を削除する

forループを使ってディクショナリの複数の要素を削除する場合は、 削除したい要素のキーをリストとして作成し、 そのリストをforループで回すだけです。 見た目が分かりやすいのが特徴です。

次のサンプルコードでは、削除するキーのリスト liを用意し、 forループで回しています。 削除する場合はdel文よりもpop()を使って第2引数を指定すると キーの存在チェックをしなくても済みます。
(関連記事: ディクショナリの要素を削除 pop

d = {"a": 10, "b": 20, "c": 30}

# 削除するキーのリスト
li = ["a", "b"]

for k in li:
	# 削除
	d.pop(k, None)

print(d)  # {'c': 30}

リスト内包表記を使って複数要素を削除する

pop()メソッドと「リスト内包表記」を組み合わせると、 1行でディクショナリから複数要素の削除を実現できます。
先にリスト内包表記の書式と使用例を確認しておきます。

リスト内包表記の書式と使用例
# 書式
[式 for 変数 in イテラブルなオブジェクト (if 条件)]

# 使用例
li = [1, 2, 3, 4]

new_li = [v * 2 for v in li] 

次のサンプルコードでは、pop()メソッドとリスト内包表記を使って ディクショナリから複数要素を削除しています。 上の書式の「」の部分が「d.pop()」に該当し、 「変数」の部分が「key」に該当します。

d = {"a": 10, "b": 20, "c": 30}

# リスト内包表記
[d.pop(key, None) for key in ["a", "b"]]

print(d) # {'c': 30}

削除した要素の値をリストとして取得したい場合は、 次のように戻り値を受け取ります。

d = {"a": 10, "b": 20, "c": 30}

new_li =  [d.pop(key, None) for key in ["a", "b"]]

print(d) # {'c': 30}

print(new_li) # [10, 20]

関連記事:Python: リスト内包表記とは、使い方

Python