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

如何使用Pydantic基于dict类型数据动态创建模型

解决方案

你可以直接遍历加载得到的字典条目,自动拼接create_model需要的入参格式,不需要手动逐个传入字段配置。

基础实现(适配非嵌套的yaml结构)

import yaml
from pydantic import create_model

# 第一步:加载yaml文件得到字典
with open("你的配置文件路径.yml", "r", encoding="utf-8") as f:
    config_dict = yaml.safe_load(f)

# 第二步:自动生成字段定义,格式为 {字段名: (字段类型, 默认值)}
field_defs = {key: (type(value), value) for key, value in config_dict.items()}

# 第三步:直接创建pydantic模型
Test = create_model("Test", **field_defs)

以你给出的示例配置为例,上述代码生成的Test类和手动定义的完全一致:

# 测试效果
t = Test()
print(t.key1) # 输出 test
print(type(t.key1)) # 输出 <class 'str'>
print(t.key2) # 输出 100
print(type(t.key2)) # 输出 <class 'int'>

进阶实现(适配嵌套yaml结构)

如果你的yaml存在嵌套字典的情况,可以用递归函数自动生成嵌套的子模型:

import yaml
from pydantic import create_model

def dict_to_pydantic_model(model_name: str, data: dict):
    field_defs = {}
    for k, v in data.items():
        if isinstance(v, dict):
            # 嵌套字典递归生成子模型
            sub_model = dict_to_pydantic_model(f"{model_name}_{k}_sub", v)
            field_defs[k] = (sub_model, sub_model())
        else:
            field_defs[k] = (type(v), v)
    return create_model(model_name, **field_defs)

# 调用示例
with open("你的配置文件路径.yml", "r", encoding="utf-8") as f:
    config_dict = yaml.safe_load(f)
Test = dict_to_pydantic_model("Test", config_dict)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:48:03