【Python】辞書型(連想配列)の要素を削除する方法(del文、pop・clearメソッド)

Pythonで辞書型(連想配列)の要素(データ)を削除する方法について詳しく解説します。

辞書型のデータ削除

Pythonの辞書型では、del文やpopメソッドで特定の要素だけを削除したり、del文やclearメソッドですべての要素を一気に消すことができます。

以下のコードは、del文で「指定したキーの要素を削除」する例です。(削除された値は取得できません

# 勇者ぴこりの持ち物リスト
pikori_items = {
    "回復薬": 5,
    "魔法の書": 2,
    "鉄の剣": 1
}

# キーが「魔法の書」の要素を削除
del pikori_items["魔法の書"]

# 結果の表示
print("勇者ぴこりの持ち物:", pikori_items)
勇者ぴこりの持ち物: {‘回復薬’: 5, ‘鉄の剣’: 1}

以下のコードは、popメソッドで「指定したキーの要素を削除」する例です。(削除された値の取得は可能

# 勇者ぴこりの持ち物リスト
pikori_items = {
    "回復薬": 5,
    "魔法の書": 2,
    "鉄の剣": 1
}

# 「回復薬」を削除する(個数も取得)
used_item = pikori_items.pop("回復薬")

# 結果を表示
print("消費した数:", used_item)
print("勇者ぴこりの持ち物:", pikori_items)
消費した数: 5
勇者ぴこりの持ち物: {‘魔法の書’: 2, ‘鉄の剣’: 1}

popメソッドは、削除と同時に値を返してくれます。
以下のコードは、clearメソッドで「指定したキーの要素を削除」する例です。

# 勇者ぴこりの持ち物リスト
pikori_items = {
    "回復薬": 5,
    "魔法の書": 2,
    "鉄の剣": 1
}

# 中身を全て削除
pikori_items.clear()

# 結果を表示
print("勇者ぴこりの持ち物:", pikori_items)
勇者ぴこりの持ち物: {}

clearメソッドにより辞書(pikori_items)の要素はすべて削除されますが、辞書自体は中身が空の状態で残ります。
一方、以下コードのように、del文で変数を指定すると、辞書自体も削除されます。

# 勇者ぴこりの持ち物リスト
pikori_items = {
    "回復薬": 5,
    "魔法の書": 2,
    "鉄の剣": 1
}

# 辞書自体を削除
del pikori_items

# 結果を表示
print("勇者ぴこりの持ち物:", pikori_items)
Traceback (most recent call last):
File “/tmp/main.py”, line 2, in
import user_code
File “/tmp/user_code.py”, line 12, in
print(“勇者ぴこりの持ち物:”, pikori_items)
^^^^^^^^^^^^
NameError: name ‘pikori_items’ is not defined

[Execution complete with exit code 1]

辞書(pikori_items)そのものが削除されたため、辞書を呼び出すると上記のエラー(NameError: name ‘pikori_items’ is not defined)が出ます。

関連ページ(もっと学びたい人へ)

辞書型の使い方については、以下ページで詳しく学ぶことができます。

【Python】辞書型(連想配列)の使い方を徹底解説(試験対策問題あり)
Pythonの辞書型(連想配列)の使い方について入門者向けに解説します。

Pythonの基礎から応用例まで、以下ページから学ぶことができます。

【Python超入門】基礎から応用例まで幅広く解説
Pythonの使い方について、基礎文法から応用例まで入門者向けに解説します。
この記事を書いた人
西住技研

プログラミング言語「Python」を研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
筆者の詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする
Python基礎

コメント

  1. 匿名 より:

    【書式】
    del 辞書名[キー]では?

    • 管理人 より:

      ※匿名様
      コメントありがとうございます。

      ご指摘頂いたとおり誤りですので修正しました。
      ありがとうございます。