You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中构建Id-姓名-赛事-总积分的嵌套字典结构

问题:构建「ID->姓名->赛事->总积分」的结构化数据

现有一个存储ID与姓名映射的Python字典league_managers:

{1443956: 'Sean McBride', 1281609: 'Maghnus Og Dunne', 4841686: 'Pearse Bowes', 406739: 'Adam Mcconville', 196345: 'Niall McCurdy', 808057: 'John McDonald', 6365597: 'Tony Cassidy', 1322001: 'Tiarnan Mccaffrey', 350275: 'Eoghan McCurdy', 4820159: 'Ciaran McKeown', 7185401: 'Ryan Russell', 5203794: 'Michael Devenny', 3145058: 'Declan Lees'}

需要为每个ID调用API获取用户本赛季每轮赛事的积分,最终形成ID->姓名->赛事->总积分的结构化数据。现有部分代码如下:

api_url = ("https://fantasy.premierleague.com/api/leagues-classic/258305/standings")
response = requests.get(api_url).json()

league_managers = dict()
manager_points = dict()

for item in response['standings']['results']:
    managerId = item['entry']
    managerName = item['player_name']
    league_managers[managerId] = managerName


for manager in league_managers:
    players_api_url = ("https://fantasy.premierleague.com/api/entry/"+ str(manager)+"/history/")
    playersResponse = requests.get(players_api_url).json()
for gameweek in playersResponse['current']:
    event = gameweek['event']
    total_points = gameweek['total_points']

请问如何修改代码实现需求?


解决方案

修改思路

  1. 调整league_managers的结构:从原有的{ID: 姓名}改为嵌套字典{ID: {'name': 姓名, 'gameweeks': {赛事轮次: 总积分}}},直接承载所有结构化数据
  2. 修复循环嵌套问题:原代码中遍历赛事的循环不在经理循环内部,导致只会处理最后一个经理的数据,需要将其嵌套进经理遍历循环中
  3. 直接在经理的嵌套字典中存入每轮赛事的积分数据

完整修改后的代码

import requests

api_url = "https://fantasy.premierleague.com/api/leagues-classic/258305/standings"
response = requests.get(api_url).json()

# 初始化结构化字典,每个ID对应包含姓名和赛事积分的嵌套结构
league_managers = {}

for item in response['standings']['results']:
    manager_id = item['entry']
    manager_name = item['player_name']
    league_managers[manager_id] = {
        'name': manager_name,
        'gameweeks': {}
    }

# 遍历每个经理,获取并存储每轮赛事积分
for manager_id, manager_data in league_managers.items():
    players_api_url = f"https://fantasy.premierleague.com/api/entry/{manager_id}/history/"
    players_response = requests.get(players_api_url).json()
    
    # 遍历当前赛季所有轮次,将积分存入对应经理的gameweeks字典
    for gameweek in players_response['current']:
        event_round = gameweek['event']
        total_points = gameweek['total_points']
        manager_data['gameweeks'][event_round] = total_points

# 示例:验证结构化数据(打印第一个经理的信息)
first_manager_id = next(iter(league_managers.keys()))
print(f"经理ID: {first_manager_id}")
print(f"姓名: {league_managers[first_manager_id]['name']}")
print("每轮赛事积分:", league_managers[first_manager_id]['gameweeks'])

关键说明

  • 使用f-string拼接API URL,比字符串相加更简洁易读
  • 每个经理的嵌套字典包含name(姓名)和gameweeks(轮次-积分映射)两个键,完全符合需求的结构化逻辑
  • 修复循环嵌套后,每个经理的赛事数据都会被独立获取并存储
  • 末尾的示例代码可用于快速验证数据结构是否正确

内容的提问来源于stack exchange,提问作者Dev 101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:31:35