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

如何从PunkAPI的JSON嵌套列表中提取符合条件的饮品和啤酒花信息

代码修复与实现方案

原有代码错误点

  • 字段访问路径错误:mash_temp是method的子字段,无法直接从接口返回的啤酒对象根层级读取
  • 数据类型处理错误:mash_temp是数组格式(支持多段糖化工艺),需要遍历每一段工艺校验条件,且不能和字符串类型的"65"做数值比较
  • 缺少duration≥75的校验逻辑

完整实现代码

import requests

url = 'https://api.punkapi.com/v2/beers'
resp = requests.get(url)
# 增加请求异常校验,避免接口失败时报错
resp.raise_for_status()
beer_list = resp.json()

print("===== 需求1:符合条件的饮品名称 =====")
for beer in beer_list:
    mash_temp_list = beer.get("method", {}).get("mash_temp", [])
    # 判断是否存在至少一段符合要求的糖化工艺,可根据业务需要调整为所有段都符合条件
    is_match = any(
        item.get("temp", {}).get("value", 0) >= 65 
        and (item.get("duration") or 0) >= 75
        for item in mash_temp_list
    )
    if is_match:
        print(beer["name"])

print("\n===== 需求2:啤酒花原料提取结果 =====")
for beer in beer_list:
    beer_id = beer["id"]
    beer_name = beer["name"]
    hop_list = beer.get("ingredients", {}).get("hops", [])
    for hop in hop_list:
        hop_name = hop["name"]
        hop_amount = f"{hop['amount']['value']}{hop['amount']['unit']}"
        hop_attr = hop["attribute"]
        print(f"饮品ID:{beer_id},饮品名称:{beer_name},啤酒花名称:{hop_name},用量:{hop_amount},属性:{hop_attr}")

逻辑说明

  • 代码增加了字段缺省值判断,避免接口返回字段缺失时触发运行报错
  • 需求1的匹配逻辑默认只要有一段糖化工艺符合条件就算匹配,你可以把any()换成all()调整为所有工艺段都满足要求
  • 需求2的输出格式可以根据你的实际需要调整,比如改为存储到列表、导出到CSV文件等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:15:03