查找 python 中的平均分数
finding average scores in python
我有一些代码可以从文本文件中获取列表并将其放入字典中。这是代码:
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'
谁能解决这个问题?
从文件中读取的数据返回为 字符串 ,但 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}
如果您的第一列是 quoted,您甚至可以让 csv.reader()
为您进行字符串到浮点数的转换;在创建 csv.reader()
对象时使用 quoting=csv.QUOTE_NONNUMERIC
将导致列值周围不使用 "
的任何内容作为 [=14= 传递给您的 Python 代码].
我有一些代码可以从文本文件中获取列表并将其放入字典中。这是代码:
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'
谁能解决这个问题?
从文件中读取的数据返回为 字符串 ,但 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}
如果您的第一列是 quoted,您甚至可以让 csv.reader()
为您进行字符串到浮点数的转换;在创建 csv.reader()
对象时使用 quoting=csv.QUOTE_NONNUMERIC
将导致列值周围不使用 "
的任何内容作为 [=14= 传递给您的 Python 代码].