按分组统计记录:基于JSON API数据实现球员按赛区分组计数
按赛区分组统计球员数量的解决方案
嘿,我来帮你搞定这个按赛区分组统计球员数量的问题~先看看你现有代码里的几个小问题,再给你完整的解决方案:
现有代码的问题点
players = players("event")这行是错误的:players是你从JSON响应里拿到的列表,不是函数,不能这么调用。如果你想从event字段下获取球员列表,应该用字典取值的方式。print(division)会报错:division变量根本没定义,你得先从每个球员的信息里提取赛区字段,或者遍历统计后的结果来输出。
完整实现步骤
首先假设你的API返回的JSON数据里,每个球员对象都包含division字段(毕竟要分组必须有这个标识嘛),比如修正后的JSON结构大概是这样:
{ "players": [ {"player_full_name": "ghny", "url": "...", "division": "East"}, {"player_full_name": "Alice", "url": "...", "division": "West"}, {"player_full_name": "Bob", "url": "...", "division": "East"} ] }
下面给你两种实用的实现方式:
方式一:用collections.defaultdict(简洁高效)
import json from collections import defaultdict # 模拟API返回的JSON响应 json_response = { "players": [ {"player_full_name": "ghny", "url": "...", "division": "East"}, {"player_full_name": "Alice", "url": "...", "division": "West"}, {"player_full_name": "Bob", "url": "...", "division": "East"}, {"player_full_name": "Charlie", "url": "...", "division": "West"}, {"player_full_name": "Dave", "url": "...", "division": "North"} ] } # 正确获取球员列表(加默认空列表避免KeyError) players = json_response.get("players", []) # 如果你的球员列表嵌套在`event`字段下,改成下面这行: # players = json_response.get("event", {}).get("players", []) # 初始化分组统计字典 division_count = defaultdict(int) # 遍历球员,按赛区计数 for player in players: # 用get方法避免没有division字段时报错,默认归为"Unknown" division = player.get("division", "Unknown") division_count[division] += 1 # 输出统计结果 print("各赛区球员数量统计:") for division, count in division_count.items(): print(f"* {division}: {count} 名球员")
方式二:用普通字典(无需额外导入模块)
如果不想导入collections模块,可以用普通字典实现:
import json json_response = { "players": [ {"player_full_name": "ghny", "url": "...", "division": "East"}, {"player_full_name": "Alice", "url": "...", "division": "West"}, {"player_full_name": "Bob", "url": "...", "division": "East"} ] } players = json_response.get("players", []) division_count = {} for player in players: division = player.get("division", "Unknown") # 如果赛区不在字典里,初始化为0,再加1 division_count[division] = division_count.get(division, 0) + 1 # 输出结果 for division, count in division_count.items(): print(f"{division}: {count}")
运行结果示例
上面的代码运行后会输出类似这样的结果:
各赛区球员数量统计: * East: 2 名球员 * West: 2 名球员 * North: 1 名球员
内容的提问来源于stack exchange,提问作者kpr cse
相关产品推荐
相关产品推荐

