当键与列表对应时,在词典中仅对第一个值求和(Python)

时间:2011-09-17 22:27:47

标签: python list dictionary sum

我正在使用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)

我不确定sum函数到底发生了什么,但是我没有获得一个值,而是在团队的每次迭代和win_percentage中获得了不同的值,并且它的值不一样......

理想情况下,该函数只返回一个值,用于字典中每个团队得分的总和。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

如果您希望运行总计可用,或者不希望迭代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即可获得该团队的得分< / em>,您需要将其添加到所有以前的团队得分的运行中,即前一次循环迭代中的scores[0]