以下是一段 Python 代码,用于解析两种形式的英雄联盟(LOL手游)个人数据,并进行统一分析展示。
---
```python
import json
from typing import Dict, Any
# 模拟两张截图的数据(实际可从OCR或手动输入获取)
data_v1 = {
"段位": "流光翡翠IV",
"场次": 206,
"胜率": 69.9,
"战损率": 5.2,
"参团率": 35.7,
"MVP次数": 2,
"S评价": 1,
"A评价": 1,
"神(超神)": 17,
"五连破": 0,
"四连破": 4,
"三连破": 12,
"先拔头筹": "有", # 仅示意
"每分钟获得金币": 748,
"造成英雄伤害/局": 13341,
"承受英雄伤害/局": 10735,
"造成防御塔伤害/局": 1957
}
data_v2 = {
"段位": "流光翡翠IV",
"场次": 206,
"胜率": 69.9,
"战损": 5.2, # 对应战损率
"参团": 35.7, # 对应参团率
"MVP": 2,
"S": 1,
"A": 1,
"神": 17,
"五连破": 0,
"四连破": 4,
"三连破": 12,
"先拔头筹": "有",
"推进": None, # 未提供具体数值,可能为综合评分
"发育": None,
"生存": None,
"输出": None
}
def normalize_lol_data(raw: Dict[str, Any]) -> Dict[str, Any]:
"""
将两种不同格式的数据统一为标准化结构
"""
normalized = {}
# 基础信息
normalized["段位"] = raw.get("段位", "未知")
normalized["场次"] = raw.get("场次", 0)
normalized["胜率"] = raw.get("胜率", 0.0)
# 关键指标(兼容不同字段名)
normalized["战损率"] = raw.get("战损率") or raw.get("战损", 0.0)
normalized["参团率"] = raw.get("参团率") or raw.get("参团", 0.0)
normalized["MVP"] = raw.get("MVP次数") or raw.get("MVP", 0)
normalized["S评价"] = raw.get("S评价") or raw.get("S", 0)
normalized["A评价"] = raw.get("A评价") or raw.get("A", 0)
normalized["超神"] = raw.get("神(超神)") or raw.get("神", 0)
# 连杀/成就
normalized["五连破"] = raw.get("五连破", 0)
normalized["四连破"] = raw.get("四连破", 0)
normalized["三连破"] = raw.get("三连破", 0)
normalized["先拔头筹"] = raw.get("先拔头筹", "无")
# 进阶数据(仅第一版有)
normalized["每分钟金币"] = raw.get("每分钟获得金币", None)
normalized["英雄伤害/局"] = raw.get("造成英雄伤害/局", None)
normalized["承受伤害/局"] = raw.get("承受英雄伤害/局", None)
normalized["塔伤害/局"] = raw.get("造成防御塔伤害/局", None)
# 第二版特有的综合评分(如果存在)
for key in ["推进", "发育", "生存", "输出"]:
if key in raw:
normalized[key] = raw[key]
return normalized
def analyze_lol_data(normalized: Dict[str, Any]) -> Dict[str, Any]:
"""
对标准化后的数据进行简单分析
"""
analysis = {}
# 基础评价
win_rate = normalized["胜率"]
if win_rate >= 60:
analysis["胜率评价"] = "优秀"
elif win_rate >= 50:
analysis["胜率评价"] = "良好"
else:
analysis["胜率评价"] = "待提升"
# 战损评价(通常 >3 算不错)
kda = normalized["战损率"]
if kda >= 4:
analysis["战损评价"] = "优秀"
elif kda >= 2.5:
analysis["战损评价"] = "良好"
else:
analysis["战损评价"] = "需改善"
# MVP率
total_games = normalized["场次"]
mvp_rate = (normalized["MVP"] / total_games) * 100 if total_games > 0 else 0
analysis["MVP率"] = f"{mvp_rate:.1f}%"
# 超神率
god_like_rate = (normalized["超神"] / total_games) * 100 if total_games > 0 else 0
analysis["超神率"] = f"{god_like_rate:.1f}%"
# 综合输出/生存(如有)
if normalized.get("输出") is not None:
analysis["输出评分"] = normalized["输出"]
if normalized.get("生存") is not None:
analysis["生存评分"] = normalized["生存"]
return analysis
# 主程序
if __name__ == "__main__":
# 分别处理两种数据
print("=== 数据版本1 分析 ===")
norm1 = normalize_lol_data(data_v1)
result1 = analyze_lol_data(norm1)
print(json.dumps(result1, indent=2, ensure_ascii=False))
print("\n=== 数据版本2 分析 ===")
norm2 = normalize_lol_data(data_v2)
result2 = analyze_lol_data(norm2)
print(json.dumps(result2, indent=2, ensure_ascii=False))
```
---
代码说明
· normalize_lol_data:统一两种字段命名(如战损率 vs 战损,MVP次数 vs MVP),并保留各自特有字段。
· analyze_lol_data:基于统一数据计算胜率评价、战损评价、MVP率、超神率等。
· 如果未来有更多字段(如推进、发育等),可直接扩展字典解析逻辑。
---
输出示例
```
=== 数据版本1 分析 ===
{
"胜率评价": "优秀",
"战损评价": "优秀",
"MVP率": "1.0%",
"超神率": "8.3%"
}
=== 数据版本2 分析 ===
{
"胜率评价": "优秀",
"战损评价": "优秀",
"MVP率": "1.0%",
"超神率": "8.3%"
}
```
如果需要接入真实OCR识别或从图片自动提取,可配合 paddleocr 或 easyocr 使用。当前代码专注于数据解析与分析逻辑。
以下是示例用图: