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

FastAPI中如何获取子模型列表中的键与值?

解决Pydantic模型实例无法通过下标访问属性的问题

错误原因

你遇到的TypeError: 'Image' object is not subscriptable,是因为Pydantic模型实例是对象而非字典,不能用['key']这种下标方式访问属性,必须用.运算符直接访问实例属性,比如image.url。

实现需求的代码示例

以下是完整的模型定义、接口实现,以及查找name为google的Image并获取对应url的逻辑:

from pydantic import BaseModel
from fastapi import FastAPI

app = FastAPI()

# 定义Pydantic模型
class Image(BaseModel):
    name: str
    url: str

class Item(BaseModel):
    images: list[Image]

# 处理请求的接口
@app.post("/get-google-image-url/")
async def get_google_image_url(item: Item):
    # 遍历Image列表,查找name为google的项
    for img in item.images:
        if img.name == "google":
            return {"google_image_url": img.url}
    # 未找到时返回提示
    return {"message": "不存在name为google的Image项"}

更简洁的写法(列表推导式)

如果想简化代码,可以用列表推导式过滤出目标Image:

@app.post("/get-google-image-url/")
async def get_google_image_url(item: Item):
    # 过滤出所有name为google的Image
    target_images = [img for img in item.images if img.name == "google"]
    if target_images:
        # 返回第一个匹配项的url(若存在多个匹配项)
        return {"google_image_url": target_images[0].url}
    return {"message": "不存在name为google的Image项"}

额外说明:转字典访问(不推荐)

如果一定要用下标方式访问属性,可以通过img.dict()方法将Pydantic实例转为字典,但这种写法不如直接用.访问直观,不推荐:

# 示例:转字典后用下标访问
for img in item.images:
    img_dict = img.dict()
    print(img_dict['url'])  # 此时不会报错,但没必要多此一举

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:03:21