遍历嵌套字典

时间:2018-12-28 20:16:56

标签: python dictionary nested

我正在尝试从位于https://fantasy.premierleague.com/drf/event/19/live的JSON文件中获取数据。但是,每当遍历接收到的数据时,我都会遇到问题。

下面我的代码中的第一个循环应该在data["elements"]["1"]["stats"]["goals_scored"]中附加值,但是每当我运行下面的代码时,我都会收到错误消息字符串索引必须为整数。每当我直接引用data["elements"]["number"]["stats"]["goals_scored"]时,它都会返回正确的数字。

import json
import requests

def goalCalculator():
    data=requests.get("https://fantasy.premierleague.com/drf/event/19/live").json()
    list1=[]
    for i in data["elements"]:
        list1.append(i["stats"]["goals_scored"])
    return list1

goalCalculator()

我已经将JSON文件映射了(如下),但是我看不到哪里出错了。我的代码不能正常工作吗?

"elements":{
    "1":{
        "stats":{
            "yellow_cards":0,
            "own_goals":0,
            "creativity":0.0,
            "goals_conceded":0,
            "bonus":0,
            "red_cards":0,
            "saves":0,
            "influence":0.0,
            "bps":0,
            "clean_sheets":0,
            "assists":0,
            "ict_index":0.0,
            "goals_scored":0,
            "threat":0.0,
            "penalties_missed":0,
            "total_points":0,
            "penalties_saved":0,
            "in_dreamteam":false,
            "minutes":0
        }
    },
    "2":{etc...

2 个答案:

答案 0 :(得分:2)

for i in data["elements"]:

以上内容并不循环遍历字典中的元素,而是循环遍历键。我会做这样的事情:

import json
import requests

def goalCalculator():
    data=requests.get("https://fantasy.premierleague.com/drf/event/19/live").json()
    list1=[]
    for key, value in data["elements"].iteritems():
        list1.append(value["stats"]["goals_scored"])
    return list1

goalCalculator()

如果您根本不需要执行任何操作的键,则可以使用(如对我的答案有评论的有用用户的建议).values()如下:

import json
import requests

    def goalCalculator():
        data=requests.get("https://fantasy.premierleague.com/drf/event/19/live").json()
        list1=[]
        for nested_dict in data["elements"].values():
            list1.append(nested_dict["stats"]["goals_scored"])
        return list1

    goalCalculator()

答案 1 :(得分:1)

代替

for i in data["elements"]:
    list1.append(i["stats"]["goals_scored"])

使用

for i in data["elements"]:
    list1.append(data["elements"][i]["stats"]["goals_scored"])

循环中的idata["elements"]字典的键,而不是您所假设的完整元素。在您的示例中,它只是“ 1”,因此您无法为其编制索引。您将需要获取完整的元素,该元素将为data["elements"][i]