【问题标题】:Parsing data in a dict解析字典中的数据
【发布时间】:2018-10-30 15:26:27
【问题描述】:

我有一个字典,我试图从中获取某些数据,这个字典的一个例子如下:

{
    '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)。我完全坚持这一点,所以任何帮助将不胜感激!

【问题讨论】:

    标签: python json string python-2.7 dictionary


    【解决方案1】:

    这只会变成丑陋的解析,但遵循 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,否则返回球队的得分。

    【讨论】:

      猜你喜欢
      • 2021-01-15
      • 1970-01-01
      • 2021-11-24
      • 2021-05-01
      • 2014-03-30
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多