在前一篇文章(https://blog.csdn.net/chzrxcter/article/details/160077532?fromshare=blogdetail&sharetype=blogdetail&sharerId=160077532&sharerefer=PC&sharesource=chzrxcter&sharefrom=from_link)中,我们已经成功地从Data Dragon和Community Dragon获取了json格式的英雄、羁绊、装备的基本信息数据库。但是这些数据库内部存在一些命名问题,需要进行初步的清洗与标准化。
在 CDragon 中:
c['traits'] = ["Quickstriker"]
而在 Trait 表中:
t["apiName"] = "TFT16_Rapidfire"
也就是说:
| 类型 | 值 |
|---|---|
| 显示名 | Quickstriker |
| 内部ID | Rapidfire |
因而在例如英雄芸阿娜(TFT16_Yunara)的数据中,存在两种羁绊命名方式(Quickstriker/Rapidfire),在后续的羁绊计算中,会出现计算错误的情况,因此需要反查设计。通过建构name_to_short 反查表,将羁绊名统一为short_id。
for t in raw.get("traits", []): if not isinstance(t, dict): continue api = t.get("apiName", "") if not api: continue short = _strip(api, n) name = t.get("name", short) levels = sorted({e.get("minUnits", 0) for e in t.get("effects", []) if e.get("minUnits", 0) > 0}) trait_db[api] = { "id" : api, "short_id": short, "name_en" : name, "levels" : levels, "effects" : t.get("effects", []), } # 双向注册:short_id 和 name_en 都能查到 short_id name_to_short[short] = short # 已是 short_id 的情况(直接命中) name_to_short[name] = short # 显示名 -> short_id # ── 解析英雄,traits 统一转为 short_id ───────────────────── for c in raw.get("champions", []): if not isinstance(c, dict): continue api = c.get("apiName", "") if not api: continue short = _strip(api, n)这样,在后续的羁绊计算中,便不会再出现命名原因导致的错误问题了。