在python中找到平均分数

时间:2015-01-25 15:54:34

标签: python lambda

我有一些代码从文本文件中获取列表并将其放入字典中。这是代码:

fd = open('Results.txt')
lines = [line.strip() for line in fd]
adict = {}
for line in lines:
  splitted = [i for i in line.split(',')]
  key = splitted[0]
  adict[key] = splitted[1:]
s = addict

然后,使用此功能,我会从此列表中的结果中找到最高分和最高平均分。我目前的代码是:

avg_mark = lambda name:sum(s[name])/len(s[name])
for i in sorted(s.keys(),key=avg_mark,reverse=True):
    print (i,avg_mark(i),"\n")

然而,它说:

TypeError: unsupported operand type(s) for +: 'int' and 'str'

任何人都可以解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

从文件读取的数据将作为字符串返回,但默认情况下sum()需要数值。您需要先将数据转换为数字。

您可以使用int()float()转换数值:

adict[key] = [float(n) for n in splitted[1:]]

您似乎在阅读CSV数据;考虑使用csv module来解析文件:

import csv

with open('Results.txt', 'r', newline='') as fd:
    reader = csv.reader(fd)
    s = {row[0]: [float(c) for c in row[1:]] for row in reader}

如果您的第一列引用,您甚至可以让csv.reader()为您执行字符串到浮点转换;在创建csv.reader()对象时使用quoting=csv.QUOTE_NONNUMERIC将导致在列值周围不使用"的任何内容作为float()传递给您的Python代码。