我正试图重组我已经存在的/工作的代码。在第二个for循环中进行更改。从以下内容更改代码时,为什么会出现错误:
import numpy as np
import pandas as pd
import requests
import json
from sklearn import preprocessing
from sklearn.preprocessing import OneHotEncoder
games_played = []
stats_for_games = []
for game_id in range(2017020001, 2017020010, 1):
url = 'https://statsapi.web.nhl.com/api/v1/game/{}/boxscore'.format(game_id)
r_2017 = requests.get(url)
game_data_2017 = r_2017.json()
for homeaway in ['home','away']:
game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('teamStats').get('teamSkaterStats')
game_dict_2017['team'] = game_data_2017.get('teams').get(homeaway).get('team').get('name')
game_dict_2017['homeaway'] = homeaway
game_dict_2017['game_id'] = game_id
games_played.append(game_dict_2017)
print(games_played)
对此:
import numpy as np
import pandas as pd
import requests
import json
from sklearn import preprocessing
from sklearn.preprocessing import OneHotEncoder
games_played = []
stats_for_games = []
for game_id in range(2017020001, 2017020010, 1):
url = 'https://statsapi.web.nhl.com/api/v1/game/{}/boxscore'.format(game_id)
r_2017 = requests.get(url)
game_data_2017 = r_2017.json()
for homeaway in ['home','away']:
game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('team').get('name')
game_dict_2017['homeaway'] = homeaway
game_dict_2017['game_id'] = game_id
games_played.append(game_dict_2017)
print(games_played)
运行它时,错误TypeError:'str‘对象不支持项分配
出现在
game_dict_2017['homeaway'] = homeaway
JSON样本-数据
{
copyright: "NHL and the NHL Shield are registered trademarks of the
National Hockey League. NHL and NHL team marks are the property of the
NHL and its teams. © NHL 2019. All Rights Reserved.",
teams: {
away: {
team: {
id: 9,
name: "Ottawa Senators",
link: "/api/v1/teams/9"
},
teamStats: {
teamSkaterStats: {
goals: 0,
pim: 0,
shots: 0,
}
}
发布于 2019-01-10 12:09:09
好吧,我终于明白问题出在哪里了。
以前的守则是:
# In this line you created a dictionary
game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('teamStats').get('teamSkaterStats')
# Here, since you have dictionary you rewrote values or created new one
game_dict_2017['team'] = game_data_2017.get('teams').get(homeaway).get('team').get('name')
game_dict_2017['homeaway'] = homeaway
game_dict_2017['game_id'] = game_id
games_played.append(game_dict_2017)
目前的代码是:
# Here you are getting a string
# You previous code was
# game_dict_2017['team'] = game_data_2017.get('teams').get(homeaway).get('team').get('name')
game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('team').get('name')
# Here you are trying to work with a string as with dictionary
game_dict_2017['homeaway'] = homeaway
game_dict_2017['game_id'] = game_id
games_played.append(game_dict_2017)
为了解决这个问题,并假设不再需要game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('teamStats').get('teamSkaterStats')
行,代码如下所示:
game_dict_2017 = dict()
game_dict_2017['team'] = game_data_2017.get('teams').get(homeaway).get('team').get('name')
game_dict_2017['homeaway'] = homeaway
game_dict_2017['game_id'] = game_id
你也可以这样做:
game_dict_2017 = {
'team': game_data_2017.get('teams').get(homeaway).get('team').get('name'),
'homeaway': homeaway,
'game_id': game_id
}
发布于 2019-01-10 12:13:58
game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('team').get('name')
这一行返回一个字符串,即'Winnipeg Jets‘。一个快速的解决方法是先初始化game_dict_2017,然后将一个dict键设置为团队名称。
示例:
game_dict_2017 = dict()
game_dict_2017['teamname'] = game_data_2017.get('teams').get(homeaway).get('team').get('name')
game_dict_2017['homeaway'] = homeaway
game_dict_2017['game_id'] = 2017020001
games_played.append(game_dict_2017)
发布于 2019-01-10 11:55:21
game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('team').get('name')
game_dict_2017['homeaway'] = homeaway
game_dict_2017['game_id'] = game_id
这就是问题所在。
您定义了game_dict_2017
,我想它是一个字符串。然后试着用它作为字典,我想你搞砸了game_dict_2017
和game_data_2017
。
https://stackoverflow.com/questions/54128103
复制相似问题