Home > Blockchain >  Iterate and Parse Json with similar values in python
Iterate and Parse Json with similar values in python

Time:10-17

I have this code which iterates and parses data from a json API feed. I am trying to filter out just the Premier League games but some competitions have similar names like 'Premier League 2 (Division 2)' and '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}')

the output for this code is below. As you can see the first 2 lines are similar competition names to 'Premier League'. I tried to filter by the competition ID (second column) but integers seem to cause an issue using this method.

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
Premier League 1000094985 1018752209 Crystal Palace - Wolves 2022-10-18T19:15:00Z NOT_STARTED Crystal Palace Wolves
Premier League 1000094985 1018752210 Bournemouth - Southampton 2022-10-19T18:30:00Z NOT_STARTED Bournemouth Southampton
Premier League 1000094985 1018752206 Brentford - Chelsea 2022-10-19T18:30:00Z NOT_STARTED Brentford Chelsea
Premier League 1000094985 1018752217 Liverpool - West Ham 2022-10-19T18:30:00Z NOT_STARTED Liverpool West Ham
Premier League 1000094985 1018752207 Newcastle United - Everton 2022-10-19T18:30:00Z NOT_STARTED Newcastle United Everton
Premier League 1000094985 1018752214 Manchester United - Tottenham 2022-10-19T19:15:00Z NOT_STARTED Manchester United Tottenham
Premier League 1000094985 1018752213 Fulham - Aston Villa 2022-10-20T18:30:00Z NOT_STARTED Fulham Aston Villa
Premier League 1000094985 1018752211 Leicester City - Leeds United 2022-10-20T19:15:00Z NOT_STARTED Leicester City Leeds United
Premier League 1000094985 1018752197 Nottingham Forest - Liverpool 2022-10-22T11:30:00Z NOT_STARTED Nottingham Forest Liverpool
Premier League 1000094985 1018752189 Everton - Crystal Palace 2022-10-22T14:00:00Z NOT_STARTED Everton Crystal Palace
Premier League 1000094985 1018752200 Manchester City - Brighton & Hove Albion 2022-10-22T14:00:00Z NOT_STARTED Manchester City Brighton & Hove Albion
Premier League 1000094985 1018752192 Chelsea - Manchester United 2022-10-22T16:30:00Z NOT_STARTED Chelsea Manchester United
Premier League 1000094985 1018752195 Aston Villa - Brentford 2022-10-23T13:00:00Z NOT_STARTED Aston Villa Brentford
Premier League 1000094985 1018752203 Leeds United - Fulham 2022-10-23T13:00:00Z NOT_STARTED Leeds United Fulham
Premier League 1000094985 1018752193 Southampton - Arsenal 2022-10-23T13:00:00Z NOT_STARTED Southampton Arsenal
Premier League 1000094985 1018752201 Wolves - Leicester City 2022-10-23T13:00:00Z NOT_STARTED Wolves Leicester City
Premier League 1000094985 1018752190 Tottenham - Newcastle United 2022-10-23T15:30:00Z NOT_STARTED Tottenham Newcastle United
Premier League 1000094985 1018752204 West Ham - Bournemouth 2022-10-24T19:00:00Z NOT_STARTED West Ham Bournemouth

what would be the best way to filter these two competitions out of the output?

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

This is what the json looks like for the Premier League games:

{
    "englishName": "Brighton & Hove Albion - Nottingham Forest",
    "groupId": 1000094985,
    "homeName": "Brighton & Hove Albion",
    "groupSortOrder": 3001001000000000000,
    "path": 
    [
        {
            "englishName": "Football",
            "termKey": "football",
            "name": "Soccer",
            "id": 1000093190
        },
        {
            "englishName": "England",
            "termKey": "england",
            "name": "England",
            "id": 1000461733
        },
        {
            "englishName": "Premier League",
            "termKey": "premier_league",
            "name": "Premier League",
            "id": 1000094985
        }
    ],
    "id": 1018752216,
    "state": "NOT_STARTED",
    "group": "Premier League",
    "start": "2022-10-18T18:30:00Z",
    "nonLiveBoCount": 243,
    "tags": 
    [
        "OFFERED_LIVE",
        "BET_BUILDER",
        "MATCH"
    ],
    "awayName": "Nottingham Forest",
    "name": "Brighton & Hove Albion - Nottingham Forest",
    "sport": "FOOTBALL"
}

this is the JSON for 'Premier League 2 (Division 2)

{
    "englishName": "Nottingham Forest U21 - Stoke City Reserves",
    "groupId": 2000096352,
    "homeName": "Nottingham Forest U21",
    "groupSortOrder": 3001999000000000000,
    "path": 
    [
        {
            "englishName": "Football",
            "termKey": "football",
            "name": "Soccer",
            "id": 1000093190
        },
        {
            "englishName": "England",
            "termKey": "england",
            "name": "England",
            "id": 1000461733
        },
        {
            "englishName": "Premier League 2 (Division 2)",
            "termKey": "premier_league_2__division_2_",
            "name": "Premier League 2 (Division 2)",
            "id": 2000096352
        }
    ],
    "id": 1019103797,
    "state": "NOT_STARTED",
    "group": "Premier League 2 (Division 2)",
    "start": "2022-10-17T18:00:00Z",
    "nonLiveBoCount": 14,
    "tags": 
    [
        "OFFERED_LIVE",
        "BET_BUILDER",
        "MATCH"
    ],
    "awayName": "Stoke City Reserves",
    "name": "Nottingham Forest U21 - Stoke City Reserves",
    "sport": "FOOTBALL"
}

and this is the JSON for "Premier League Cup'

{
    "englishName": "Middlesbrough U21 - West Bromwich Reserves",
    "groupId": 2000099592,
    "homeName": "Middlesbrough U21",
    "groupSortOrder": 3001999000000000000,
    "path": 
    [
        {
            "englishName": "Football",
            "termKey": "football",
            "name": "Soccer",
            "id": 1000093190
        },
        {
            "englishName": "England",
            "termKey": "england",
            "name": "England",
            "id": 1000461733
        },
        {
            "englishName": "Premier League Cup",
            "termKey": "premier_league_cup",
            "name": "Premier League Cup",
            "id": 2000099592
        }
    ],
    "id": 1019095920,
    "state": "NOT_STARTED",
    "group": "Premier League Cup",
    "start": "2022-10-17T17:00:00Z",
    "nonLiveBoCount": 14,
    "tags": 
    [
        "OFFERED_LIVE",
        "BET_BUILDER",
        "MATCH"
    ],
    "awayName": "West Bromwich Reserves",
    "name": "Middlesbrough U21 - West Bromwich Reserves",
    "sport": "FOOTBALL"
}

CodePudding user response:

Looks like you can update the conditional to filter on the groupId or group name

if event_data['path'][1]['name'] == 'England' and event_data['groupId'] == 1000094985 and 'MATCH' in event_data['tags']:

or

if event_data['path'][1]['name'] == 'England' and event_data['group'] == 'Premier League' and 'MATCH' in event_data['tags']:

  • Related