Pythonでリスト内辞書の特定の要素を削除する

2 min read読了の目安(約1900字

やりたいこと

下記のようなリスト内にある辞書の特定の要素を削除する。
今回はWifeキーの要素を削除する。(天さんごめん。)

[
    {
        "Earth":[
            {"Name": "Goku", "Race": "Saiyan","Wife": "ChiChi"},
            {"Name": "Piccolo", "Race:": "Namekian"},
            {"Name": "Krillin", "Race": "Earthling", "Wife": "Android18"}
        ],
        "KingKai":[
            {"Name": "Yamcha", "Race": "Earthling"},
            {"Name": "Tien", "Race": "Earthling", "Wife": "Launch"},
            {"Name": "Chiaotzu", "Race": "Earthling"}
        ]
    }
]

実装

  • まずlistから対象の辞書を参照する。
  • 参照した辞書の消したいキー(ここではWifeキー)を指定してdelで削除する。
list = [
    {
        "Earth":[
            {"Name": "Goku", "Race": "Saiyan","Wife": "ChiChi"},
            {"Name": "Piccolo", "Race:": "Namekian"},
            {"Name": "Krillin", "Race": "Earthling", "Wife": "Android18"}
        ],
        "KingKai":[
            {"Name": "Yamcha", "Race": "Earthling"},
            {"Name": "Tien", "Race": "Earthling", "Wife": "Launch"},
            {"Name": "Chiaotzu", "Race": "Earthling"}
        ]
    }
]

for list_item in list:
    if "Earth" in list_item:
        earth = list_item["Earth"]
        for earth_item in earth:
            if "Wife" in earth_item:
                del earth_item["Wife"]
    
    if "KingKai" in list_item:
        kai = list_item["KingKai"]
        for kai_item in kai:
            if "Wife" in kai_item:
                del kai_item["Wife"]

pprint.pprint(list)

結果

[{'Earth': [{'Name': 'Goku', 'Race': 'Saiyan'},
            {'Name': 'Piccolo', 'Race:': 'Namekian'},
            {'Name': 'Krillin', 'Race': 'Earthling'}],
  'KingKai': [{'Name': 'Yamcha', 'Race': 'Earthling'},
              {'Name': 'Tien', 'Race': 'Earthling'},
              {'Name': 'Chiaotzu', 'Race': 'Earthling'}]}]

みんな独り身になりました。

備考

  • delは存在しないキーを指定するとKeyErrorになるので気をつけて。
  • earth_itemkai_itemはlistの要素の参照なので、削除したものを代入し直さなくても大丈夫。(プログラミング久方振りで基本的なことまで忘れてました...)