2015-12-20 6 views
0

Я пытаюсь использовать словарь, чтобы я не мог хранить дубликаты, и это прекрасно работает, но затем, когда я пытаюсь получить объекты из словаря и вызывать функции на них, интерпретатор говорит мне:Измените объекты из OrderedDict в Python

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 связывает имена с объектами, поэтому я думал, что копирование объектов из словаря будет работать, но похоже, что оно не работает.

Heres мой код:

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 

Как я могу получить объекты из словаря можно использовать без ограничений, чтобы быть в упорядоченном словаре и, следовательно, быть «не вызываемая»

редактировать:

функция

unique_qb[0].stats(2015, week=13) 

является вызовом объекта ТНА t хранится в этой записи словаря, и вот его заглушка из 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] 
+0

Здесь не используется 'OrderedDict'. Это вызывает у меня подозрение, что вы не знаете, что делаете, или что ваш пример не содержит очень важных частей. – ShadowRanger

+0

Я понятия не имею, что я делаю. Я вообще не знаком с python. И я не думал, что я использую OrderedDict, но сообщение об ошибке показало, что я был. – esoler

+0

Вы вдавлены в выложенный код неправильно. Я получаю 'IndexError: индекс индекса вне диапазона' на строке' print unique_qb [0] .name', но я могу воспроизвести вашу ошибку, отменив «#copy qbs ...» и все после нее. –

ответ

1

Словарь доступен с [] не (). Последний для вызовов функций.

Использование отладчика .stats это свойство, которое возвращает 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 

Поскольку вы описали другую функцию, вы не называете функцию, о которой вы думаете.

+0

Я сделал доступ к словарю с помощью []? – esoler

+0

@esoler, Как я уже сказал, информации недостаточно, но это сообщение об ошибке - это вызов словаря '()', а не использование '[]'. Отправьте полный ответ на сообщение об ошибке. –

+0

@esoler, я установил API и обновил свой ответ. –