Разбор данных в дикте - PullRequest
0 голосов
/ 21 мая 2018

У меня есть диктат, из которого я пытаюсь получить определенные данные, пример этого диктата следующий:

{
    'totalGames': 1,
    'dates': [{
        'totalGames': 1,
        'totalMatches': 0,
        'matches': [],
        'totalEvents': 0,
        'totalItems': 1,
        'games': [{
            'status': {
                'codedGameState': '7',
                'abstractGameState': 'Final',
                'startTimeTBD': False,
                'detailedState': 'Final',
                'statusCode': '7',
                },
            'season': '20172018',
            'gameDate': '2018-05-20T19:00:00Z',
            'venue': {'link': '/api/v1/venues/null',
                       'name': 'Bell MTS Place'},
            'gameType': 'P',
            'teams': {'home': {'leagueRecord': {'wins': 9,
                       'losses': 8, 'type': 'league'}, 'score': 1,
                       'team': {'link': '/api/v1/teams/52',
                       'id': 52, 'name': 'Winnipeg Jets'}},
                       'away': {'leagueRecord': {'wins': 12,
                       'losses': 3, 'type': 'league'}, 'score': 2,
                       'team': {'link': '/api/v1/teams/54',
                       'id': 54, 'name': 'Vegas Golden Knights'}}},
            'content': {'link': '/api/v1/game/2017030325/content'},
            'link': '/api/v1/game/2017030325/feed/live',
            'gamePk': 2017030325,
            }],
        'date': '2018-05-20',
        'events': [],
        }],
    'totalMatches': 0,
    'copyright': 'NHL and the NHL Shield are registered trademarks of the National Hockey League. NHL and NHL team marks are the property of the NHL and its teams. \xa9 NHL 2018. All Rights Reserved.',
    'totalEvents': 0,
    'totalItems': 1,
    'wait': 10,
    }

Мне интересно получить счет для определенной команды, если они играли в ту ночьНапример, если моя команда интересов - Вегас Золотые Рыцари, я хотел бы создать переменную, которая будет содержать их очки (в данном случае 2).Я полностью застрял на этом, поэтому любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 21 мая 2018

Это просто превращается в уродливый синтаксический анализ, но его легко выполнить, следуя структуре JSON;рекомендовал бы сплющить структуру для ваших целей.С учетом вышесказанного, если вы хотите найти счет конкретной команды на определенную дату, вы можете сделать это:

def find_score_by_team(gamedict, team_of_interest, date_of_interest):
    for date in gamedict['dates']:
        for game in date['games']:
            if game['gameDate'].startswith(date_of_interest):
                for advantage in game['teams']:
                    if game['teams'][advantage]['team']['name'] == team_of_interest:
                        return game['teams'][advantage]['score']
    return -1

Пример запроса:

>>> d = {'totalGames':1,'dates':[{'totalGames':1,'totalMatches':0,'matches':[],'totalEvents':0,'totalItems':1,'games':[{'status':{'codedGameState':'7','abstractGameState':'Final','startTimeTBD':False,'detailedState':'Final','statusCode':'7',},'season':'20172018','gameDate':'2018-05-20T19:00:00Z','venue':{'link':'/api/v1/venues/null','name':'BellMTSPlace'},'gameType':'P','teams':{'home':{'leagueRecord':{'wins':9,'losses':8,'type':'league'},'score':1,'team':{'link':'/api/v1/teams/52','id':52,'name':'WinnipegJets'}},'away':{'leagueRecord':{'wins':12,'losses':3,'type':'league'},'score':2,'team':{'link':'/api/v1/teams/54','id':54,'name':'VegasGoldenKnights'}}},'content':{'link':'/api/v1/game/2017030325/content'},'link':'/api/v1/game/2017030325/feed/live','gamePk':2017030325,}],'date':u'2018-05-20','events':[],}],'totalMatches':0,'copyright':'NHLandtheNHLShieldareregisteredtrademarksoftheNationalHockeyLeague.NHLandNHLteammarksarethepropertyoftheNHLanditsteams.\xa9NHL2018.AllRightsReserved.','totalEvents':0,'totalItems':1,'wait':10,}
>>> find_score_by_team(d, 'VegasGoldenKnights', '2018-05-20')
2

Возвращает-1 если команда не играла в ту ночь, в противном случае она возвращает счет команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...