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]