Цикл по вложенному словарю - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь получить данные из файла JSON, найденного в https://fantasy.premierleague.com/drf/event/19/live. Однако, я сталкиваюсь с проблемой всякий раз, когда перебираю полученные данные.

Первый цикл в моем кодениже следует добавить значение в 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 голосов
/ 28 декабря 2018

Вместо

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

используйте

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

* * * * * * * * * * *1006* в цикле является ключом словаря data["elements"], а не полным элементом, как вы предполагаете.В вашем примере это просто «1», поэтому вы не можете индексировать это.Вам нужно будет получить полный элемент, который будет data["elements"][i]

0 голосов
/ 28 декабря 2018
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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...