按平均分数排序Python

时间:2016-02-15 11:50:50

标签: python file sorting

所以我的程序目前按名称和分数排序,但我需要为用户创建平均分数。

以下是我的文件的快速示例:

Reece 5  
John 6  
Reece 8  
Reece 9  
Alex 9   

我需要能够像这样打印Reece的平均分数:

Reece 7.3

7.3是5,8,9的平均值

我不完全确定如何控制这个,有什么帮助?

4 个答案:

答案 0 :(得分:0)

假设您有一个您正在阅读的文件file.txt,您可以通过以下方式计算出一个人的平均分数:

def getMean(name):
    with open('file.txt', 'r') as f:
        total = 0
        count = 0
        for line in f.readlines():
            line = line.split(" ")
            if line[0] == name:
                total += int(line[1])
                count += 1
        return total/count

这将读取文件中的每一行,将其拆分到空格中,每当第一个单词等于您要查找的名称时,它会将值添加到运行总计并递增计数。然后,最后,它可以计算出平均值。一个示例调用是:

>>> getMean("Reece")
7.333333333333

如果你想将它舍入到一个小数位,你有两个选项,第一个是舍入返回值:

>>> round(getMean("Reece"), 1)
7.3

或者在函数中对其进行舍入:

return round(total/count,1)

答案 1 :(得分:0)

  1. 将信息读入某种数据结构(例如,字典)。 这意味着您必须在阅读时解析数据,这意味着,在您阅读数据时,您需要能够理解哪个部分是密钥(在本例中是名称),哪个部分是价值(意味着得分)

  2. 计算每个人的平均分数,这将根据您选择存储数据的方式而有所不同。

  3. 使用计算出的信息排序。

答案 2 :(得分:0)

可以做到的一种方法是将值读入列表中(使用python3)。

mydic={}
with open('myfile.txt','r') as f:
    for line in f:
        name,value=line.split()
        value=int(value)#or float
        if name in mydic.keys():
           mydic[name].append(value)
        else:
            mydic[name]=[value]
#compute average:
for name in mydic:
    average=sum(mydic[name])/len(mydic[name])
    print("{} : {}".format(name,average)) 

给出了输出:

John : 6.0
Alex : 9.0
Reece : 7.333333333333333

答案 3 :(得分:0)

你可以这样试试,

def get_average(data):
    vals = {item.split()[0]: [] for item in data.splitlines()}
    for item in data.splitlines():
        vals[item.split()[0]].append(float(item.split()[1]))
    return { k: sum(v) / len(v) for k, v in vals.iteritems()}


data = '''Reece 5  
John 6  
Reece 8  
Reece 9  
Alex 9  '''

average = get_average(data)
print(average['Reece'])

输出

7.33333333333
相关问题