我有一些代码从文本文件中获取列表并将其放入字典中。这是代码:
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'
任何人都可以解决这个问题吗?
答案 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代码。