繁体   English   中英

对文件进行平均排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM