
[英]how to compute the average, write it to a CSV file then sort it using python
[英]Sort Average In A file
我有一个文件,每个人3分。 每个人都有自己的行。 我想使用这些分数,并获得所有三个分数的平均值。 分数由制表符按降序分开。 例如:
tam 10 6 11
tom 3 7 3
tim 5 4 6
这些人的平均得分为:
tam 9
tom 5
tim 4
我希望这些能够打印到python shell,但是不能保存到文件中。
with open("file.txt") as file1: d = {} count = 0 for line in file1: column = line.split() names = column[0] average = (int(column[1].strip()) + int(column[2].strip()) + int(column[3].strip()))/3 count = 0 while count < 3: d.setdefault(names, []).append(average) count = count + 1 for names, v in sorted(d.items()): averages = (sum(v)/3) print(names,average) averageslist=[] averageslist.append(averages)
我的代码只找到第一人称平均值,然后将其输出给所有人。 我还希望它按平均值的顺序下降。
您可以使用以下代码将文件解析为(名称,平均)元组列表,并按平均排序列表打印每个条目:
import operator
with open("file.txt") as f:
data = []
for line in f:
parts = line.split()
name = parts[0]
vals = parts[1:]
avg = sum(int(x) for x in vals)/len(vals)
data.append((name, avg))
for person in sorted(data, key=operator.itemgetter(1), reverse=True):
print("{} {}".format(*person))
您几乎是正确的。您正在第一步中计算average
。因此再次需要sum(v)/3
with open("file.txt") as file1:
d = {}
count = 0
for line in file1:
column = line.split()
names = column[0]
average = (int(column[1].strip()) + int(column[2].strip()) + int(column[3].strip()))/3
d[names] = average
for names, v in sorted(d.items(),key=lambda x:x[1],reverse=True): #increasing order==>sorted(d.items(),key=lambda x:x[1])
print(names,v)
#output
('tam', 9)
('tim', 5)
('tom', 4)
按名称排序
for names, v in sorted(d.items()):
print(names,v)
#output
('tam', 9)
('tim', 5)
('tom', 4)
尝试这个:
from operator import itemgetter
with open("file.txt") as file1:
d = {}
count = 0
for line in file1:
column = line.split()
names = column[0]
average = (int(column[1].strip()) + int(column[2].strip()) + int(column[3].strip()))/3
count = 0
d.setdefault(names, []).append(average)
for names,v in sorted(d.items(), key=itemgetter(1),reverse=True):
print(names,v)
问题是这样的:
averages = (sum(v)/3)
print(names,average)
请注意,在第一行上您正在计算averages
(末尾有s),在下一行上您正在打印average
(无s)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.