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

如何打印包含Schema定义的Pydantic对象?

如何将Pydantic实例数据与Schema定义信息一同输出?

先看你定义的Pydantic模型代码:

from datetime import datetime
from pydantic import BaseModel, Field


class MainModel(BaseModel):
    name: str = Field(
        "example",
        title='The name',
        description='The name assigned',
    )
    date: datetime = Field(
        datetime.now(),
        title='Date',
        description='The date of creation...',
    )

初始化实例后:

example = MainModel(
    name="test",
    date=datetime.now()
)

你用example.dict()只能拿到实例的纯数据,没有Schema里的title、description这类元信息;而MainModel.schema_json()只能拿到模型的Schema定义,没有实例数据。

Pydantic本身没有提供直接把两者合并输出的方法,你需要自己手动合并两者的字典结果。这里给你一个具体的实现思路:

  1. 先用MainModel.schema()获取模型的Schema字典(注意是schema(),不是schema_json(),后者返回JSON字符串),里面的properties字段保存了每个字段的元信息;
  2. 用example.dict()拿到实例的纯数据;
  3. 遍历实例数据的每个字段,从Schema的properties中取出对应字段的title、description,和字段值合并成你需要的结构。

具体代码示例:

# 获取Schema字典和实例数据
schema = MainModel.schema()
instance_data = example.dict()

# 合并数据与元信息
merged_result = {}
for field_name, field_value in instance_data.items():
    # 从Schema中取出当前字段的元信息
    field_meta = schema["properties"].get(field_name, {})
    merged_result[field_name] = {
        "值": field_value,
        "标题": field_meta.get("title"),
        "描述": field_meta.get("description")
    }

# 打印合并后的结果
print(merged_result)

运行后会输出类似这样的结构:

{
    'name': {
        '值': 'test',
        '标题': 'The name',
        '描述': 'The name assigned'
    },
    'date': {
        '值': datetime.datetime(2024, 5, 20, 15, 30, 0, 123456),
        '标题': 'Date',
        '描述': 'The date of creation...'
    }
}

你可以根据自己的需求调整合并后的结构,比如把元信息和值放在同一层级,或者改成其他格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:57:28