如何从Riot API返回的字典列表中筛选championId为25的指定条目
英雄联盟熟练度API筛选指定英雄数据修复方案
问题原因
你当前代码存在两个核心问题:
- Riot英雄熟练度接口返回的是列表结构,每个元素对应单个英雄的熟练度字典,不存在名为
championid25的索引,直接按该索引取值会抛出语法/取值异常 - 请勿用
json作为变量名,避免和Python标准库json模块重名,引发后续逻辑冲突
修正后实现代码
import requests from time import sleep # 请替换为你自己的Riot开发者API密钥 API_KEY = "YOUR_RIOT_API_KEY" def get_champion_mastery(summoner_id, target_champion_id=25): # 请求全英雄熟练度数据 mastery_list = requests.get( f"https://na1.api.riotgames.com/lol/champion-mastery/v4/champion-masteries/by-summoner/{summoner_id}?api_key={API_KEY}" ).json() sleep(1.5) # 适配Riot API频率限制 # 筛选目标英雄数据 target_data = next((item for item in mastery_list if item['championId'] == target_champion_id), None) if target_data: print(target_data) return target_data print("未查询到对应英雄的熟练度数据") return None
逻辑说明
- 用生成器表达式搭配
next()方法筛选条目,匹配到符合条件的字典后就终止遍历,相比全量遍历列表效率更高 - 新增空值兜底逻辑,当召唤师从未玩过目标英雄时不会抛出异常
- 支持自定义查询任意英雄的熟练度,只需调用时传入第二个参数指定
championId即可
内容的提问来源于stack exchange,提问作者OptimumAF
相关产品推荐
相关产品推荐

