首页 > 解决方案 > 根据条件从字典列表中删除嵌套字典?

问题描述

我有以下带有嵌套字典的字典。如果键(对象名)中有苹果,我想删除嵌套字典,否则保留它。

输入

{
    "item": [
        {
            "seq_key": [
                {
                    "height": 153,
                    "object-name": "person:1"
                },
                {
                    "height": 107,
                    "object-name": "apple:1"
                },
                {
                    "height": 90,
                    "object-name": "orange:2"
                },
                {
                    "height": 84,
                    "object-name": "apple:3"
                },
                {
                    "height": 94,
                    "object-name": "apple:4"
                }
            ],
            "f-no": "0"
        },
        {
            "seq_key": [
                {
                    "height": 161,
                    "object-name": "person:1"
                },
                {
                    "height": 84,
                    "object-name": "mango:3"
                }
            ],
            "f-no": "1"
        }
    ]
}

我的预期输出

{
    "item": [
        {
            "seq_key": [
                {
                    "height": 153,
                    "object-name": "person:1"
                },
                {
                    "height": 90,
                    "object-name": "orange:2"
                }
            ],
            "f-no": "0"
        },
        {
            "seq_key": [
                {
                    "height": 161,
                    "object-name": "person:1"
                },
                {
                    "height": 84,
                    "object-name": "mango:3"
                }
            ],
            "f-no": "1"
        }
    ]
}

我试过的

import json 

with open(r"my_file.json", encoding='utf-8') as f:
    abc = json.load(f)

for key,value in abc.items():
    for i in value:
        for n,item in enumerate(i.get('seq_key')):
            if item.get('object-name').split(":")[0]  == 'apple':
                item.clear()

上面的代码给出了空字典,我不知道如何从列表中删除。如果我尝试使用列表删除方法,则仅删除两个项目而不是全部。

任何人都可以帮助我,如何删除它?

标签: pythonpython-3.xdictionary

解决方案


您可以使用列表推导来创建一个包含您感兴趣的元素的新列表,而不是尝试删除列表元素:

for seq in abc["item"]:
    seq["seq_key"] = [d for d in seq["seq_key"] if "apple" not in d["object-name"]]

推荐阅读