python - 根据条件从字典列表中删除嵌套字典?
问题描述
我有以下带有嵌套字典的字典。如果键(对象名)中有苹果,我想删除嵌套字典,否则保留它。
输入
{
"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()
上面的代码给出了空字典,我不知道如何从列表中删除。如果我尝试使用列表删除方法,则仅删除两个项目而不是全部。
任何人都可以帮助我,如何删除它?
解决方案
您可以使用列表推导来创建一个包含您感兴趣的元素的新列表,而不是尝试删除列表元素:
for seq in abc["item"]:
seq["seq_key"] = [d for d in seq["seq_key"] if "apple" not in d["object-name"]]
推荐阅读
- windows - uwp scrollviewer 视口 - 有没有办法知道当前控件是否在视口中并且对用户可见?
- javascript - chrome扩展javascript中的循环使页面无法加载
- c++ - `std::make_shared` 因空参数包而失败
- configuration - 具有 resteasy-reactive 的 quarkus 不会重新平衡负载
- python - 二元运算符后的 W504 换行符
- c - 在 C 中合并结构
- python - 从我的数据库中检索特定字段
- java - 如何在java中以空格格式读取输入
- java - Spring Security 5 - 为具有不同用户角色的多个 URL 启用表单登录和基本身份验证
- python - ndarray 函数不会在 numba/JIT 中编译