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
相关产品推荐
相关产品推荐

