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

Python迭代解析JSON时如何过滤相似名称的英超赛事

问题

我写了一段Python代码用来迭代解析JSON API返回的赛事数据,目标只筛选英超(Premier League)赛事,但有些赛事名称类似,比如Premier League 2 (Division 2)和Premier League Cup,导致这些非目标赛事也被纳入结果了。

现有代码:

for event_data in data['events']:
    if event_data['path'][1]['name'] == 'England' and 'Premier League' in event_data['path'][2]['name'] and 'MATCH' in event_data['tags']:
        competition = event_data['group']
        competition_id = event_data['groupId']
        event_id = event_data['id']
        event_name = event_data['name']
        home_team = event_data['homeName']
        away_team = event_data['awayName']
        event_start = event_data['start']
        event_status = event_data['state']

        print(f'{competition} {competition_id} {event_id} {event_name} {event_start} {event_status} {home_team} {away_team}')

代码输出里前两行是不需要的非目标赛事:

Premier League 2 (Division 2) 2000096352 1019103797 Nottingham Forest U21 - Stoke City Reserves 2022-10-17T18:00:00Z NOT_STARTED Nottingham Forest U21 Stoke City Reserves
Premier League Cup 2000099592 1019095920 Middlesbrough U21 - West Bromwich Reserves 2022-10-17T17:00:00Z NOT_STARTED Middlesbrough U21 West Bromwich Reserves
Premier League 1000094985 1018752216 Brighton & Hove Albion - Nottingham Forest 2022-10-18T18:30:00Z NOT_STARTED Brighton & Hove Albion Nottingham Forest
...(其余有效输出省略)

相关JSON结构特征:

  • 英超赛事的path[2]['name']严格等于Premier League,groupId为1000094985
  • 非目标赛事的path[2]['name']包含额外后缀(如2 (Division 2)、Cup),且groupId与英超不同

现在需要过滤掉这两类非目标赛事。

解决方案

可以通过以下几种可靠方式实现精准筛选:

方法1:精确匹配赛事名称

将原有的包含判断改为精确匹配,直接判断path[2]['name']是否等于Premier League,彻底排除所有带后缀的类似赛事:

for event_data in data['events']:
    # 修改为精确匹配赛事名称
    if event_data['path'][1]['name'] == 'England' and event_data['path'][2]['name'] == 'Premier League' and 'MATCH' in event_data['tags']:
        competition = event_data['group']
        competition_id = event_data['groupId']
        event_id = event_data['id']
        event_name = event_data['name']
        home_team = event_data['homeName']
        away_team = event_data['awayName']
        event_start = event_data['start']
        event_status = event_data['state']

        print(f'{competition} {competition_id} {event_id} {event_name} {event_start} {event_status} {home_team} {away_team}')

方法2:通过groupId过滤

利用英超固定的groupId(1000094985)进行筛选,这种方式比名称匹配更稳定,避免赛事名称变更导致的筛选失效:

for event_data in data['events']:
    # 添加groupId精确匹配条件
    if event_data['path'][1]['name'] == 'England' and event_data['groupId'] == 1000094985 and 'MATCH' in event_data['tags']:
        competition = event_data['group']
        competition_id = event_data['groupId']
        event_id = event_data['id']
        event_name = event_data['name']
        home_team = event_data['homeName']
        away_team = event_data['awayName']
        event_start = event_data['start']
        event_status = event_data['state']

        print(f'{competition} {competition_id} {event_id} {event_name} {event_start} {event_status} {home_team} {away_team}')

注:如果之前用groupId过滤遇到整数类型问题,检查API返回的groupId是否为字符串类型,若是则将判断改为event_data['groupId'] == '1000094985'。

方法3:排除特定关键词

如果需要保留其他包含Premier League的赛事,仅排除这两类,可以添加排除条件:

for event_data in data['events']:
    comp_name = event_data['path'][2]['name']
    # 排除带"2"或"Cup"的赛事
    if (event_data['path'][1]['name'] == 'England' 
        and 'Premier League' in comp_name 
        and '2' not in comp_name 
        and 'Cup' not in comp_name
        and 'MATCH' in event_data['tags']):
        competition = event_data['group']
        competition_id = event_data['groupId']
        event_id = event_data['id']
        event_name = event_data['name']
        home_team = event_data['homeName']
        away_team = event_data['awayName']
        event_start = event_data['start']
        event_status = event_data['state']

        print(f'{competition} {competition_id} {event_id} {event_name} {event_start} {event_status} {home_team} {away_team}')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:55:46