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

如何用Python从API返回的JSON中提取rating最高值用于Discord机器人开发

实现方案

你原来的代码存在两处核心问题:

  • udata['legends']中的每一项是字典类型,没有max()方法,直接调用会抛出属性错误
  • 原逻辑只尝试获取最高数值,没有同步记录对应英雄的名称,无法输出完整信息

你可以直接使用Python内置的max()方法,指定按rating字段排序,直接取出评分最高的英雄对象,修改后的代码如下:

@client.command()
async def rankedstats(ctx, msg):
    id = msg
    url = f"https://api.brawlhalla.com/player/{id}/ranked?api_key=MY_API_KEY"
    r = requests.get(url)
    udata = r.json()
    uname = udata['name']
    upeakrating = udata['peak_rating']
    uwins = udata['wins']
    urating = udata['rating']

    # 替换原for循环,直接获取rating最高的英雄
    top_legend = max(udata['legends'], key=lambda item: item['rating'])
    # 格式化展示信息,名称首字母大写匹配示例效果
    top_legend_display = f"{top_legend['legend_name_key'].title()}:{top_legend['rating']}"

    rsemb = discord.Embed(title="CurrentElo", colour=3092790)
    rsemb.add_field(name=f"{uname}'s current elo", value=f"{urating}", inline=False)
    rsemb.add_field(name=f"{uname}'s Peak elo",value=f"{upeakrating}", inline=False)
    rsemb.add_field(name=f"{uname}'s ranked wins",value=f"{uwins}", inline=False)
    rsemb.add_field(name="Highest Rated Legend", value=top_legend_display, inline=False)
    rsemb.set_thumbnail(url="https://p.kindpng.com/picc/s/306-3068244_brawlhalla-will-slam-into-hd-png-download.png")
   
    await ctx.send(embed=rsemb)

如果要兼容legends为空的异常场景,可以加一层判断:

if udata['legends']:
    top_legend = max(udata['legends'], key=lambda item: item['rating'])
    top_legend_display = f"{top_legend['legend_name_key'].title()}:{top_legend['rating']}"
else:
    top_legend_display = "暂无英雄对战数据"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:51:01