Суммирование только первых значений в словаре, когда ключи соответствуют спискам (Python) - PullRequest
1 голос
/ 18 сентября 2011

Я работаю в Python 2.7. У меня есть список команд в следующем словаре:

NL = {'Phillies': [662, 476], 'Braves': [610, 550], 'Mets': [656, 687]}

Первое значение в списке - это количество забегов, набранных командой, а второе - количество пробежек, которые бросила команда.

Я использую этот код для определения процента побед пифагорейцев в каждой команде, но я также хотел бы, чтобы эта функция вычисляла общее количество набранных и разрешенных групп в целом.

Прямо сейчас я использую:

Pythag(league):
    for team, scores in league.iteritems():
    runs_scored = float(scores[0])
    runs_allowed = float(scores[1])
    win_percentage = (runs_scored**2)/((runs_scored**2)+(runs_allowed**2))
    total_runs_scored = sum(scores[0] for team in league)
    print '%s: %f' % (team, win_percentage)
    print '%s: %f' % ('League Total:', total_runs_scored)

Я не совсем уверен, что происходит с функцией суммы, но вместо получения одного значения я получаю разные значения на каждой итерации команды и win_percentage, и это не одно и то же значение ...

В идеале функция должна просто возвращать одно значение для суммы прогонов, набранных для каждой команды в словаре.

Спасибо за любую помощь.

1 Ответ

3 голосов
/ 18 сентября 2011

Если вы хотите, чтобы промежуточный итог был доступен, или не хотите итерировать по league дважды, вы можете сделать:

def Pythag(league):
    total_runs_scored = 0
    for team, scores in league.iteritems():
        # other stuff
        total_runs_scored += scores[0]
        # other stuff
        # runs scored by all teams up to this point
        print 'League Running Total of Runs Scored: %f' % (total_runs_scored,)
    # outside the loop, so total runs scored in the league.
    # will be the same as the last one in the loop
    print 'League Total Runs Scored: %f' % (total_runs_scored,)

Помните, что внутри цикла, о котором вы говорите отдельная команда , поэтому вам не нужно делать sum, чтобы набрать прогонов этой командой , вместо этого вам нужно добавить его в прогоны, набранные все предыдущие команды , то есть scores[0] из предыдущих итераций цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...