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

如何通过字典中的英雄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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:10:24