从 Python 中的 OrderedDict 中获取对象以进行更改
Getting Objects out of OrderedDict in Python to be altered
我正在尝试使用字典来防止自己存储重复项并且工作正常但是当我尝试从字典中获取对象并调用它们的函数时解释器告诉我:
Traceback (most recent call last):
File "C:/Users/ejsol/Desktop/NflData/playerDataCollector.py", line 24, in
<module>
print unique_qb[0].stats(2015, week=13)
TypeError: 'OrderedDict' object is not callable
我尝试对字典中的元素进行深拷贝并使用它们来制作列表,但我仍然遇到同样的问题。我阅读了一些有关 python 如何将名称绑定到对象的信息,这就是为什么我认为从字典中复制对象会起作用但它似乎不起作用的原因。
这是我的代码:
import nflgame
import copy
players = dict()
qbs = dict()
#get a list of all games in 2014
games = nflgame.games(2014)
#make a list of the players in each game
for g in games:
_p = g.players
for p in _p:
if p.playerid not in players:
players[p.playerid] = p
#find all the qbs in the players
for p in players:
if players[p].guess_position == 'QB' and p not in qbs:
qbs[p] = players[p]
#copy qbs to a list that I can manipulate
unique_qb = []
for v in qbs:
c = copy.deepcopy(qbs[v])
unique_qb.append(c)
print unique_qb[0].name
print unique_qb[0].stats(2015, week=13)#this line produces the error
如何在不受有序字典限制的情况下使用字典中的对象 "not callable"
编辑:
函数
unique_qb[0].stats(2015, week=13)
是对存储在字典条目中的对象的调用,这是它来自 nflgame api 我正在尝试使用的存根。
def stats(self, year, week=None):
games = nflgame.games(year, week)
players = list(nflgame.combine(games).filter(playerid=self.playerid))
if len(players) == 0:
return GamePlayerStats(self.player_id, self.gsis_name,
None, self.team)
return players[0]
使用 []
而不是 ()
访问字典。后者用于函数调用。
使用调试器,.stats
是 属性 而 returns 是 OrderedDict:
@property
def stats(self):
"""
Returns a dict of all stats for the player.
"""
return self._stats
[Dbg]>>> unique_qb[0].stats
OrderedDict([(u'passing_att', 33), (u'passing_twoptm', 0), (u'passing_twopta', 0), (u'passing_yds', 250), (u'passing_cmp', 22), (u'passing_ints', 0), (u'passing_tds', 2), (u'rushing_lngtd', 0), (u'rushing_tds', 0), (u'rushing_twopta', 0), (u'rushing_lng', -1), (u'rushing_yds', -1), (u'rushing_att', 1), (u'rushing_twoptm', 0)])
既然是字典,就需要[]
。例如:
[Dbg]>>> unique_qb[0].stats['passing_att']
33
由于您描述了一个不同的函数,您并不是在调用您认为的函数。
我正在尝试使用字典来防止自己存储重复项并且工作正常但是当我尝试从字典中获取对象并调用它们的函数时解释器告诉我:
Traceback (most recent call last):
File "C:/Users/ejsol/Desktop/NflData/playerDataCollector.py", line 24, in
<module>
print unique_qb[0].stats(2015, week=13)
TypeError: 'OrderedDict' object is not callable
我尝试对字典中的元素进行深拷贝并使用它们来制作列表,但我仍然遇到同样的问题。我阅读了一些有关 python 如何将名称绑定到对象的信息,这就是为什么我认为从字典中复制对象会起作用但它似乎不起作用的原因。
这是我的代码:
import nflgame
import copy
players = dict()
qbs = dict()
#get a list of all games in 2014
games = nflgame.games(2014)
#make a list of the players in each game
for g in games:
_p = g.players
for p in _p:
if p.playerid not in players:
players[p.playerid] = p
#find all the qbs in the players
for p in players:
if players[p].guess_position == 'QB' and p not in qbs:
qbs[p] = players[p]
#copy qbs to a list that I can manipulate
unique_qb = []
for v in qbs:
c = copy.deepcopy(qbs[v])
unique_qb.append(c)
print unique_qb[0].name
print unique_qb[0].stats(2015, week=13)#this line produces the error
如何在不受有序字典限制的情况下使用字典中的对象 "not callable"
编辑:
函数
unique_qb[0].stats(2015, week=13)
是对存储在字典条目中的对象的调用,这是它来自 nflgame api 我正在尝试使用的存根。
def stats(self, year, week=None):
games = nflgame.games(year, week)
players = list(nflgame.combine(games).filter(playerid=self.playerid))
if len(players) == 0:
return GamePlayerStats(self.player_id, self.gsis_name,
None, self.team)
return players[0]
使用 []
而不是 ()
访问字典。后者用于函数调用。
使用调试器,.stats
是 属性 而 returns 是 OrderedDict:
@property
def stats(self):
"""
Returns a dict of all stats for the player.
"""
return self._stats
[Dbg]>>> unique_qb[0].stats
OrderedDict([(u'passing_att', 33), (u'passing_twoptm', 0), (u'passing_twopta', 0), (u'passing_yds', 250), (u'passing_cmp', 22), (u'passing_ints', 0), (u'passing_tds', 2), (u'rushing_lngtd', 0), (u'rushing_tds', 0), (u'rushing_twopta', 0), (u'rushing_lng', -1), (u'rushing_yds', -1), (u'rushing_att', 1), (u'rushing_twoptm', 0)])
既然是字典,就需要[]
。例如:
[Dbg]>>> unique_qb[0].stats['passing_att']
33
由于您描述了一个不同的函数,您并不是在调用您认为的函数。