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

FastAPI查询参数接口中正确循环语法的实现求助

优化FastAPI查询接口的循环实现

首先得明确你的books数据结构,两种常见场景的正确写法如下:

场景1:books是字典(键为作者标识,值为书籍信息)

如果你的books是类似这样的字典结构:

books = {
    "author_zhang": {"name": "Python基础教程", "author": "张三"},
    "author_li": {"name": "FastAPI从入门到精通", "author": "李四"}
}

你原来的循环逻辑没问题,但可以用items()方法同时获取键和值,代码更直观:

@app.get("/get-by-author")
def get_book_by_name(name: str):
    for author_id, book_info in books.items():
        if book_info["name"] == name:
            return book_info
    return {"Data": "Not found"}

场景2:books是列表(每个元素为书籍信息字典)

如果books是列表结构(更常见的存储方式):

books = [
    {"name": "Python基础教程", "author": "张三"},
    {"name": "FastAPI从入门到精通", "author": "李四"}
]

你原来的循环会报错,因为遍历列表拿到的是单个书籍字典,不是键,正确写法:

@app.get("/get-by-author")
def get_book_by_name(name: str):
    for book_info in books:
        if book_info["name"] == name:
            return book_info
    return {"Data": "Not found"}

更简洁的写法(生成器表达式)

不管是字典还是列表,都可以用next()配合生成器表达式简化代码,一行搞定:

  • 字典结构:
@app.get("/get-by-author")
def get_book_by_name(name: str):
    return next((info for _, info in books.items() if info["name"] == name), {"Data": "Not found"})
  • 列表结构:
@app.get("/get-by-author")
def get_book_by_name(name: str):
    return next((info for info in books if info["name"] == name), {"Data": "Not found"})

另外建议把函数名从book改成get_book_by_name,避免和变量名混淆,提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:00:26