如何将JSON响应中的多场比赛助攻值整合到单个字典键下
问题解决:将所有助攻值收集到单个字典键下
问题描述
我正在遍历按比赛场次分组的JSON响应,希望把所有助攻(ast)字段的值收集起来,分配给单个字典键。但目前每个值都对应独立的相同字典键,达不到预期效果。
JSON响应示例
{'data': [{'ast': 9, 'blk': 0, 'dreb': 4, 'fg3_pct': 0.0, 'fg3a': 2, 'fg3m': 0, 'fg_pct': 0.6, 'fga': 20, 'fgm': 12, 'ft_pct': 0.333, 'fta': 3, 'ftm': 1, 'game': {'date': '2003-10-29T00:00:00.000Z', 'home_team_id': 26, 'home_team_score': 106, 'id': 15946, 'period': 4, 'postseason': False, 'season': 2003, 'status': 'Final', 'time': ' ', 'visitor_team_id': 6, 'visitor_team_score': 92}, 'id': 361330, 'min': '42:50', 'oreb': 2, 'pf': 3, 'player': {'first_name': 'LeBron', 'height_feet': 6, 'height_inches': 8, 'id': 237, 'last_name': 'James', 'position': 'F', 'team_id': 14, 'weight_pounds': 250}, 'pts': 25, 'reb': 6, 'stl': 4, 'team': {'abbreviation': 'CLE', 'city': 'Cleveland', 'conference': 'East', 'division': 'Central', 'full_name': 'Cleveland Cavaliers', 'id': 6, 'name': 'Cavaliers'}, 'turnover': 2}, {'ast': 8, 'blk': 0, 'dreb': 10, 'fg3_pct': 0.2, 'fg3a': 5, 'fg3m': 1, 'fg_pct': 0.471, 'fga': 17, 'fgm': 8, 'ft_pct': 0.571, 'fta': 7, 'ftm': 4, 'game': {'date': '2003-10-30T00:00:00.000Z', 'home_team_id': 24, 'home_team_score': 95, 'id': 16277, 'period': 4, 'postseason': False, 'season': 2003, 'status': 'Final', 'time': ' ', 'visitor_team_id': 6, 'visitor_team_score': 86}, 'id': 361523, 'min': '40:21', 'oreb': 2, 'pf': 1, 'player': {'first_name': 'LeBron', 'height_feet': 6, 'height_inches': 8, 'id': 237, 'last_name': 'James', 'position': 'F', 'team_id': 14, 'weight_pounds': 250}, 'pts': 21, 'reb': 12, 'stl': 1, 'team': {'abbreviation': 'CLE', 'city': 'Cleveland', 'conference': 'East', 'division': 'Central', 'full_name': 'Cleveland Cavaliers', 'id': 6, 'name': 'Cavaliers'}, 'turnover': 7}]}
现有代码
players_stats=[] players_game_stats_url="https://balldontlie.io/api/v1/stats?season[]=2018&player_ids[]=237" result=requests.get(players_game_stats_url).json() for assists in result['data']: players_stats.append({"Assists per game":assists['ast']})
期望输出
{"Assists per game": [9,8,6,7,3]}
实际输出
[{'Assists per game': 9}, {'Assists per game': 8}, {'Assists per game': 6}, {'Assists per game': 7}, {'Assists per game': 3}, {'Assists per game': 9}, {'Assists per game': 4}, {'Assists per game': 7}, {'Assists per game': 3}, {'Assists per game': 8}, {'Assists per game': 8}, {'Assists per game': 8}, {'Assists per game': 2}, {'Assists per game': 4}, {'Assists per game': 9}, {'Assists per game': 7}, {'Assists per game': 7}, {'Assists per game': 5}, {'Assists per game': 8}, {'Assists per game': 5}, {'Assists per game': 3}, {'Assists per game': 9}, {'Assists per game': 4}, {'Assists per game': 6}, {'Assists per game': 3}]
解决方案
问题出在你每次循环都创建了一个新字典并添加到列表中,最终得到的是多个字典的集合。要实现预期效果,需要初始化一个包含空列表的字典,然后将每个助攻值追加到该列表里:
# 初始化带空列表的字典 players_stats = {"Assists per game": []} players_game_stats_url = "https://balldontlie.io/api/v1/stats?season[]=2018&player_ids[]=237" result = requests.get(players_game_stats_url).json() # 遍历每场比赛数据,将助攻值追加到列表中 for game_stats in result['data']: players_stats["Assists per game"].append(game_stats['ast'])
这样修改后,players_stats就会成为你期望的格式:单个字典,键为Assists per game,值是所有比赛助攻数组成的列表。
内容的提问来源于stack exchange,提问作者Youssouf
相关产品推荐
相关产品推荐

