Python中已知Champion key,如何获取对应Champion名称(未知JSON上层键)
解决通过Champion Key获取对应名称的问题
首先咱们先拆解下你的问题:你手里的JSON结构里,data的上层键是英雄的id(比如"Aatrox"),但你现在只知道英雄的key值(比如266),没法直接通过键名索引,得遍历data里的所有英雄条目来匹配目标key。
另外要注意一个容易踩坑的细节:JSON里的key是字符串类型(比如"266"),而你代码里的key是整数266,直接比较会匹配失败,得先统一类型。
修改后的完整代码
import json key = 266 # 把整数key转成字符串,和JSON里的类型匹配 target_key = str(key) with open('C:/Users/robin/Documents/Riot project/champion.json', 'r', encoding='utf-8') as f: champion_info = json.load(f) # 遍历data里的所有英雄条目,找匹配的key champion_name = None for champ_id, champ_data in champion_info['data'].items(): if champ_data['key'] == target_key: champion_name = champ_data['name'] break # 找到后直接退出循环,不用再遍历剩下的英雄 # 输出结果 if champion_name: print(f"找到对应英雄:{champion_name}") else: print(f"未找到key为{key}的英雄")
代码说明
- 类型统一:把整数
key转为字符串target_key,确保和JSON中存储的key类型一致,避免类型不匹配导致的匹配失败。 - 遍历匹配:用
items()方法遍历data里的所有英雄,champ_id就是你之前不知道的上层键(比如"Aatrox"),champ_data是该英雄的完整数据对象。 - 提前终止:找到目标英雄后立刻
break循环,减少不必要的遍历,提升效率。
可选优化:构建映射字典(适合多次查询)
如果需要频繁根据key查询英雄名,建议提前构建一个key -> name的映射字典,这样后续查询都是O(1)的高效操作:
import json with open('C:/Users/robin/Documents/Riot project/champion.json', 'r', encoding='utf-8') as f: champion_info = json.load(f) # 一次性构建key到name的映射字典 key_to_name = {champ['key']: champ['name'] for champ in champion_info['data'].values()} # 后续查询直接用字典取值 key = 266 target_key = str(key) champion_name = key_to_name.get(target_key, "未找到对应英雄") print(champion_name)
这种方式适合需要多次查询的场景,只需要在加载文件时构建一次字典,之后每次查询都非常快速。
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

