python3:遍历字典

2024-10-01 22:28:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我本可以创造一个更具体的标题,但我不知道如何表述我的问题。在

{
   "playerStatSummaries": [
      {
         "playerStatSummaryType": "AramUnranked5x5",
         "aggregatedStats": {
            "totalChampionKills": 2250,
            "totalAssists": 6199,
            "totalTurretsKilled": 114
         },
         "modifyDate": 1463737953000,
         "wins": 211
      },
      {
         "playerStatSummaryType": "RankedSolo5x5",
         "aggregatedStats": {
            "totalNeutralMinionsKilled": 928,
            "totalMinionKills": 15346,
            "totalChampionKills": 522,
            "totalAssists": 459,
            "totalTurretsKilled": 129
         },
         "losses": 35,
         "modifyDate": 1464273041000,
         "wins": 44
      },
      {
         "playerStatSummaryType": "URF",
         "aggregatedStats": {
            "totalNeutralMinionsKilled": 100,
            "totalMinionKills": 1379,
            "totalChampionKills": 138,
            "totalAssists": 125,
            "totalTurretsKilled": 25
         },
         "modifyDate": 1463946086000,
         "wins": 10
      }
   ],
   "summonerId": 85058811
}

我想在这个字典上反复检查,直到找到“wins”:44键/值对。我需要动态访问它,因为json文件并不总是具有相同数量的条目,因此索引也不总是相同的。在

我知道如何简单地迭代键:

^{pr2}$

但是我不知道如何再次迭代这些键,因为在“playerStateSumeries”块中还有另一组键/对值。在

我也不明白为什么这里的键/对值有多个值,例如“playerStatSummaryType:”RankedSolo5x5,“aggregatedStats”。我以为每个键只能有一个值。在

简而言之:如果我不知道当我收到这个文件时有多少个条目(我称之为块),如何动态地到达“RankedSolo5x5”块中的“wins”:44个键/值对。在

很抱歉,如果这个问题听起来很模糊,因为我很困惑如何解决这个问题,但请告诉我是否需要更多的信息。在


Tags: 文件标题动态条目wins对值modifydatetotalturretskilled
3条回答

可以使用List Comprehension遍历统计信息

wins = [x['wins'] for x in data['playerStatSummaries']]
print(wins)
>>> [211, 44, 10]

对列表理解使用if条件:

win_dict = [{'wins': x['wins']} for x in json_data['playerStatSummaries'] if x['playerStatSummaryType'] == 'RankedSolo5x5']
# [{'wins': 44}]

在此语法中,{}表示字典,而[]表示列表或数组。在

首先是一个{,因此外部数据项是一个字典。主键似乎是"playerStatSummaries",所以让我们直接访问它:

data['playerStatSummaries']

现在,playerStatSummaries是一个项目的列表/数组,所以我们要么迭代它,要么在其中使用一个索引号。您已经说过编号/顺序不同,所以我们将对列表进行迭代。在

^{pr2}$

这将使用list comprehension创建一个新列表,该列表只包含与数据结构中列表相同的元素。但我们可以走得更远!在

每个summ项本身就是一个字典,其键类似于'wins': 44或{}。因此,我们可以使用列表理解的if clause功能筛选出您想要的项目:

stats = [summ for summ in data['playerStatSummaries'] if summ['wins'] == 44]

或者可能是更好的方法:

stats = [summ for summ in data['playerStatSummaries'] if summ['playerStatSummaryType'] == 'RankedSolo5x5']

现在您将有一个包含44个wins的所有元素的列表,或者类型是RankedSolo5x5。在

很可能只有一个元素。您可以保留列表,并按如下方式访问它:

wins = stats[0]['wins']

或者你可以在理解的时候抓住第0个元素:

stat = [summ for summ in ... 'RankedSolo5x5'][0]
wins = stats['wins']

相关问题 更多 >

    热门问题