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

Pydantic v2能否处理混合类型容器?规范定义方式咨询

Pydantic v2 处理混合类型容器的说明

能否处理混合类型容器?

Pydantic v2完全支持处理混合类型的容器。你给出的代码是合法的:

class Foo(BaseModel):
  foo_list: list

序列化时,Pydantic会保留列表内所有元素的类型信息,并自动将Python类型转换为对应的JSON类型。比如实例化并序列化:

foo = Foo(foo_list=[1, "hello", True, {"key": "value"}])
print(foo.model_dump_json())

输出结果为:

{"foo_list": [1, "hello", true, {"key": "value"}]}

可以看到,不同类型的元素都被正确序列化,没有丢失类型特征。

推荐的混合类型列表定义方式

直接写list虽然能工作,但缺乏类型提示和数据校验能力,根据场景不同,推荐以下几种更规范的写法:

  • 明确任意类型:list[Any]
    用typing.Any标注元素类型,既保留类型提示,又和直接写list的行为一致:

    from typing import Any
    from pydantic import BaseModel
    
    class Foo(BaseModel):
      foo_list: list[Any]
    
  • 限定特定混合类型:list[Union[...]]
    如果列表元素只是几种特定类型的组合,用Union明确列出允许的类型,Pydantic会自动校验元素合法性:

    from typing import Union, list
    from pydantic import BaseModel
    
    class Foo(BaseModel):
      foo_list: list[Union[int, str, bool, dict]]
    

    这种写法下,若传入不符合指定类型的元素(比如函数对象),Pydantic会直接抛出校验错误,避免非法数据流入。

  • JSON兼容混合类型:Json[list]
    如果列表元素都是JSON可序列化的混合类型,使用pydantic.Json类型可以确保数据符合JSON规范:

    from pydantic import BaseModel, Json
    
    class Foo(BaseModel):
      foo_list: Json[list]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:33:19