news 2026/9/5 3:10:59

Python实现解析英雄联盟个人数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python实现解析英雄联盟个人数据

以下是一段 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 使用。当前代码专注于数据解析与分析逻辑。

以下是示例用图:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 3:07:44

JavaScript实现跨平台摇一摇功能:从DeviceMotionEvent到实战封装

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 3:03:51

可灵MCP协议在电商视频生成中的实战应用与优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 3:02:18

BumpMesh:基于深度学习的PBR材质生成与节点化工作流实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 3:01:56

郑州企业定制开发避坑指南:从需求拆解到源码交付的六个技术判断点

郑州企业定制开发避坑指南:从需求拆解到源码交付的六个技术判断点摘要:企业定制系统出问题的环节,大多不在编码,而在需求建模、集成设计、交付物定义和运维条款这四处。本文结合我们在郑州做定制开发的实际项目经验,把…

作者头像 李华
网站建设 2026/9/5 2:55:02

SolidWorks国标焊件型材库创建与应用全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华