查找 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 代码].