You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Cerberus的normalize函数为嵌套字典填充默认值

实现方法

默认值不生效的原因:Cerberus 的normalized方法填充默认值的逻辑为:仅当字段的父级结构已存在,且字段本身配置了default参数时才会自动填充默认值。你当前的 schema 中仅为最内层的enabled设置了默认值,作为父级的api字段仅标记了required: True未配置默认值,所以不会自动生成api对应的字典结构,内层的enabled默认值自然无法触发填充。

你只需要在api字段的配置中添加default: {}即可实现需求,修改后的完整代码如下:

from yaml import load, Loader
from cerberus import Validator

text_schema = """
server:
  type: dict
  required: True
  schema:
    host:
      required: True
      type: string
    api:
      type: dict
      required: True
      default: {} # 新增该行配置
      schema:
        enabled:
          type: boolean
          required: True
          default: True
"""

testyaml = """
server:
  host: hostname
"""
schema = load(text_schema, Loader=Loader)
doc = load(testyaml, Loader=Loader)
v = Validator(schema, purge_unknown=True)
print(v.normalized(doc))

运行后输出结果和你预期的一致:

{'server': {'host': 'hostname', 'api': {'enabled': True}}}

补充说明:如果存在更多层级的嵌套字典,每一层需要自动生成的字典字段都需要配置default: {},才能触发下层字段的默认值填充。

内容的提问来源于stack exchange,提问作者pszafer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:54:06