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]