Python Cerberus如何定义允许任意顶级键的字典校验规则?
Cerberus 动态键字典校验方案
可以实现对应校验,Cerberus 内置的 keysrules 配置就是专门处理「顶级键不固定、所有值遵循相同结构」这类场景的。
注:你给出的示例存在语法笔误,Python 中方括号
[]是列表结构,无法直接存放键值对,我们默认你指的是值为固定结构的字典(即方括号改为花括号{}),如果实际是其他结构,调整keysrules下的校验规则即可。
示例校验代码
from cerberus import Validator # 定义校验规则 schema = { # keysrules 会作用于字典下所有顶级键的对应值 "keysrules": { "type": "dict", # 定义值的固定结构 "schema": { "key1": {"type": "string", "required": True}, "key2": {"type": "string", "required": True} } } } validator = Validator(schema) # 校验符合要求的字典 valid_data = { "rand_value": {"key1": "val1", "key2": "val2"}, "another_rand_value": {"key1": "val1", "key2": "val2"} } print(validator.validate(valid_data)) # 输出 True # 校验不符合要求的字典(某值缺失key2) invalid_data = { "rand_value": {"key1": "val1"}, "another_rand_value": {"key1": "val1", "key2": "val2"} } print(validator.validate(invalid_data)) # 输出 False print(validator.errors) # 输出对应错误信息:{'rand_value': [{'key2': ['required field']}]}
如果你的值结构不是字典,只需要修改 keysrules 下的规则即可,不需要调整顶级键的匹配逻辑。
内容的提问来源于stack exchange,提问作者Prime
相关产品推荐
相关产品推荐

