python - 查找dict中是否存在数组且不为空
问题描述
我想检查我的 JSON 输入中是否存在一个元素,并且看起来下面的代码片段有效
import json
y = {
"attributes": [
{
"name": "test"
}
]
}
p2 = json.dumps(y)
if 'attributes' not in p2:
print("not found")
else:
print("found")
我现在想检查属性元素是否属于列表类型和列表大小
实现这一目标的pythonic方法是什么?
解决方案
的结果json.dumps
是 JSON 格式的字符串,因此如果您要搜索p2
,则必须进行某种字符串匹配。即'attributes:[' in p2
匹配是在你的 JSON 中的某个地方有一个“属性”键名,后跟一个数组。这个解决方案并不理想,因为它不能处理 JSON 字符串格式不同(例如,带有缩进)的情况。
pythonic的方法是检查y
自己,就像其他答案所暗示的那样。即
('attributes' in y) # True because it exists
(isinstance(y['attributes'], list)) # True because it's a list
最pythonic的方法是简单地假设它是一个列表并在你点击一个时处理失败。
我还想向Marshmallow序列化库添加一个快速的提示。它旨在处理更复杂的模式验证任务,但您也可以在此处应用它来验证属性字段是否存在以及它是否映射到列表。IE
y = { ... } # like before...
from mashmallow import Schema, fields
class AttributesList(Schema):
attributes = fields.List(fields.Dict())
al = AttributesList()
al.dumps(y)
推荐阅读
- machine-learning - 如果一个多类分类器均匀地分布错误分类,即使分类器不好,它不会总是给出高 AUC 吗?
- python - 无法合并熊猫中的透视数据
- python - TKinter 将 Canvas 从选项卡提升到父级
- python - FastAPI 发布请求正文,任意数量 json 的 jsonlines
- concurrency - DB2 Select 插入并发问题
- postgresql - PostgreSQL 请求 json_agg 重复结果
- python - 如何从python中的数据帧生成成对元组数组?
- javascript - 在 NodeJs 中将样式字母转换为常规字母
- javascript - 反应等待承诺解决不获取数据
- dot - Gephi 图导致一个 id 为“null”的节点