Python如何从dict列表中获取条目?

2024-10-01 17:30:46 发布

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

现在(如果我没有错的话)我有一个包含一些信息的dicts列表;我想从列表中得到一个特定的项目,但是我很难找到我想要的项目;这就是我正在尝试的:

stats = requests.get("https://lan.api.pvp.net/api/lol/lan/v1.3/stats/by-summoner/24244/"
                     "summary?season=SEASON2016&api_key=").json()

pprint([d['playerStatSummaries'] for d in stats if 'playerStatSummaryType' in d])

我通过观看一些示例尝试了这一点;它可能会起作用,但可能我做得不对,它的输出只是一个“[]”请求包含以下信息:

"summonerId": 24244,
"playerStatSummaries": [

    {
        "playerStatSummaryType": "CAP5x5",
        "wins": 20,
        "modifyDate": 1453305771000,
        "aggregatedStats": {
            "totalChampionKills": 308,
            "totalMinionKills": 4985,
            "totalTurretsKilled": 36,
            "totalNeutralMinionsKilled": 466,
            "totalAssists": 255
        }
    },
    {
        "playerStatSummaryType": "CoopVsAI",
        "wins": 34,
        "modifyDate": 1453305771000,
        "aggregatedStats": {
            "totalChampionKills": 394,
            "totalMinionKills": 2741,
            "totalTurretsKilled": 57,
            "totalNeutralMinionsKilled": 146,
            "totalAssists": 336
        }
    },
    {
        "playerStatSummaryType": "CoopVsAI3x3",
        "wins": 1,
        "modifyDate": 1453305771000,
        "aggregatedStats": {
            "totalChampionKills": 6,
            "totalMinionKills": 69,
            "totalTurretsKilled": 2,
            "totalNeutralMinionsKilled": 0,
            "totalAssists": 3
        }
    },
    {
        "playerStatSummaryType": "RankedTeam3x3",
        "wins": 0,
        "losses": 0,
        "modifyDate": 1353893998000,
        "aggregatedStats": { }
    },
    {
        "playerStatSummaryType": "RankedTeam5x5",
        "wins": 0,
        "losses": 0,
        "modifyDate": 1354061714000,
        "aggregatedStats": { }
    }

假设我想访问“CoopVsAI”的信息,这是第二个;我想从中访问“totalChampionKills”;我该怎么做?因为它们是嵌套的,所以我不知道怎么做。我试过了

for key, value in stats['playerStatSummaries'].items():
    if key['playerStatSummaryType'] == "Unranked":
        # do something

但那没用,所以,就这样,谢谢你的帮助:)


Tags: keyinapi信息statswinsmodifydatetotalturretskilled
3条回答

"playerStatSummaries"保存list值而不是dict。因此你的for循环应该是这样的:

#         v  This will be `dict` object
for player_stat_summary in stats['playerStatSummaries']:
    if player_stat_summary['playerStatSummaryType'] == "Unranked":
        # Do Something

        # player_stat_summary['aggregatedStats']['totalChampionKills']
        # For accessing the value you require

假设你的stats

stats ={"summonerId": 24244,
"playerStatSummaries": [

    {
        "playerStatSummaryType": "CAP5x5",
        "wins": 20,
        "modifyDate": 1453305771000,
        "aggregatedStats": {
            "totalChampionKills": 308,
            "totalMinionKills": 4985,
            "totalTurretsKilled": 36,
            "totalNeutralMinionsKilled": 466,
            "totalAssists": 255
        }
    },
    {
        "playerStatSummaryType": "CoopVsAI",
        "wins": 34,
        "modifyDate": 1453305771000,
        "aggregatedStats": {
            "totalChampionKills": 394,
            "totalMinionKills": 2741,
            "totalTurretsKilled": 57,
            "totalNeutralMinionsKilled": 146,
            "totalAssists": 336
        }
    },
    {
        "playerStatSummaryType": "CoopVsAI3x3",
        "wins": 1,
        "modifyDate": 1453305771000,
        "aggregatedStats": {
            "totalChampionKills": 6,
            "totalMinionKills": 69,
            "totalTurretsKilled": 2,
            "totalNeutralMinionsKilled": 0,
            "totalAssists": 3
        }
    },
    {
        "playerStatSummaryType": "RankedTeam3x3",
        "wins": 0,
        "losses": 0,
        "modifyDate": 1353893998000,
        "aggregatedStats": { }
    },
    {
        "playerStatSummaryType": "RankedTeam5x5",
        "wins": 0,
        "losses": 0,
        "modifyDate": 1354061714000,
        "aggregatedStats": { }
    }
    ]
}

以下步骤将起作用

for stat in stats['playerStatSummaries']:
    if(stat["playerStatSummaryType"] == 'CoopVsAI'):
        print stat["aggregatedStats"]['totalChampionKills']

“playerStatSummaries”这是一个内部对象列表,为什么不直接作为元素列表阅读呢?你知道吗

In [9]: a[1]
Out[9]: 
{'aggregatedStats': {'totalAssists': 336,
  'totalChampionKills': 394,
  'totalMinionKills': 2741,
  'totalNeutralMinionsKilled': 146,
  'totalTurretsKilled': 57},
 'modifyDate': 1453305771000,
 'playerStatSummaryType': 'CoopVsAI',
 'wins': 34}

如果你需要更深一层的话也是一样的操作

In [12]: a[1]['aggregatedStats']['totalChampionKills']
Out[12]: 394

相关问题 更多 >

    热门问题