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

如何在Pydantic中将对象列表序列化为以Item的ID为键的字典?

Pydantic实现Item对象转uid为键的字典

方案一:自定义model_dump方法

让ResponseModel继承BaseModel,重写序列化方法直接生成目标结构:

from uuid import UUID, uuid4
from datetime import datetime
from pydantic import BaseModel, Field

def datetime_now():
    return datetime.now()

class Item(BaseModel):
    uid: UUID = Field(default_factory=uuid4)
    updated: datetime = Field(default_factory=datetime_now)
    # 补充其他字段

class ResponseModel(BaseModel):
    items: list[Item]

    def model_dump(self, **kwargs):
        # 将Item列表转换为以uid字符串为键的字典
        return {str(item.uid): item.model_dump(**kwargs) for item in self.items}

# 测试代码
item1 = Item()
item2 = Item()
response = ResponseModel(items=[item1, item2])
print(response.model_dump())

方案二:使用计算字段(Pydantic v2+)

利用Pydantic v2的computed_field特性,生成目标映射字段:

from pydantic import computed_field

class ResponseModel(BaseModel):
    items: list[Item]

    @computed_field(return_type=dict[str, Item])
    def items_by_uid(self) -> dict[str, Item]:
        return {str(item.uid): item for item in self.items}

# 序列化时指定输出计算字段
response = ResponseModel(items=[item1, item2])
print(response.model_dump(include={"items_by_uid"}))

关键提示

  • Python字典不支持UUID类型作为键,必须将uid转为字符串
  • 若用于FastAPI等API框架,直接返回序列化后的结果即可,客户端将获得便于按uid访问的键值对结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:37:27