如何通过字典中的英雄ID获取对应英雄名称?
根据英雄ID获取对应名称的解决方案
最优高效解法(推荐)
先把英雄列表转换成ID到名称的映射字典,这样查询每个ID的时间复杂度是O(1),不管数据量多大都很快:
# 你的原始数据 hero_data = { "heroes": [ {"name": "hero1", "id": 1}, {"name": "hero2", "id": 2}, {"name": "hero3", "id": 3}, # 补充你实际拥有的其他英雄条目,比如id=15、27等的英雄 ] } hero_ids = [1, 15, 27, 44, 135] # 第一步:构建ID到名称的映射字典 hero_id_map = {hero["id"]: hero["name"] for hero in hero_data["heroes"]} # 第二步:生成目标名称列表,自动处理不存在的ID(这里用"未知英雄"作为占位符) hero_names = [hero_id_map.get(hero_id, "未知英雄") for hero_id in hero_ids] print(hero_names) # 输出示例:['hero1', 'hero15', 'hero27', '未知英雄', '未知英雄'](取决于你实际的英雄数据)
手动遍历解法(适合小数据量)
如果不想用字典映射,也可以用双层循环手动查找,逻辑更直观:
hero_names = [] for target_id in hero_ids: found = False for hero in hero_data["heroes"]: if hero["id"] == target_id: hero_names.append(hero["name"]) found = True break if not found: hero_names.append("未知英雄")
为什么你之前的尝试没成功?
你提到用列表推导式没成功,大概率是写法问题——如果直接遍历英雄列表筛选ID,会得到存在的英雄名称,但顺序和hero_ids不一致,而且重复ID也不会重复输出。比如错误写法:
# 错误写法:顺序不对,且会过滤掉不存在的ID wrong_names = [h["name"] for h in hero_data["heroes"] if h["id"] in hero_ids]
正确的列表推导式应该是反过来,遍历hero_ids去查映射,也就是第一种解法里的写法。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

