Python - 嵌套在Dict中的List中的Dict嵌套

时间:2017-01-19 01:33:09

标签: python dictionary

当我做request.get时,我得到了一个看起来像这样的响应,数据来自LoL API:

{
"champions": [
    {
        "id": 111,
        "stats": {
            "maxChampionsKilled": 2,
            "maxNumDeaths": 5,
            "mostChampionKillsPerSession": 2,
            "mostSpellsCast": 0,
            "totalAssists": 25,
            "totalChampionKills": 2,
            "totalDamageDealt": 40838,
            "totalDamageTaken": 27900,
            "totalDeathsPerSession": 5,
            "totalDoubleKills": 0,
            "totalFirstBlood": 0,
            "totalGoldEarned": 11070,
            "totalMagicDamageDealt": 21083,
            "totalMinionKills": 56,
            "totalPentaKills": 0,
            "totalPhysicalDamageDealt": 12876,
            "totalQuadraKills": 0,
            "totalSessionsLost": 1,
            "totalSessionsPlayed": 1,
            "totalSessionsWon": 0,
            "totalTripleKills": 0,
            "totalTurretsKilled": 1,
            "totalUnrealKills": 0
        }
    },

我正在努力获取“统计数据”中的数据。我真正想做的是类似于以下内容:

champ_data = received['champions']['stats']['totalSessionsPlayed']
print(champ_data)

然而它不起作用,因为在“冠军”之后有一个'['而且我得到了错误:

TypeError: list indices must be integers, not str

4 个答案:

答案 0 :(得分:1)

你想要这个

received['champions'][0]['stats']

获得第一个冠军的统计数据。或者,这个

received['champions'][n]['stats']

获取 nth 冠军的统计数据。或者,这个

[champion['stats'] for champion in received['champions']]

列出每位冠军的统计数据。

答案 1 :(得分:0)

received['champions']是一个列表。要处理所有条目(如果你想做什么),你必须迭代它:

for champion in received['champions']:
    print(champion['stats']['totalSessionsPlayed'])

答案 2 :(得分:0)

另外,如果属性champions为空,请检查您收到的数据对象。

答案 3 :(得分:0)

在你的例子中,'champion'是一个包含一个元素的列表。 该列表元素可以由冠军[0]访问。 此列表的元素是一个包含2个键:值对的字典。 'stats'是第二对的关键,可以通过冠军[0] ['stats']访问。 同样,'stats'键的值是一个字典,其任何键的值,例如'totalSessionsPlayed'的值都可以通过       冠军[0] [ '统计'] [ 'totalSessionsPlayed']