我正在尝试从位于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...
答案 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"])
循环中的i
是data["elements"]
字典的键,而不是您所假设的完整元素。在您的示例中,它只是“ 1”,因此您无法为其编制索引。您将需要获取完整的元素,该元素将为data["elements"][i]