按第二个元素的平均值对元组进行排序

时间:2015-04-10 17:49:00

标签: sorting csv python-3.x

我已经能够使用函数将csv文件转换为列表格式。通过这样做,我能够为一个类号分配一个名称,然后再增加3个号码,例如:

在csv文件中:

Hussain     1   7   8   0
Alexandra   1   0   0   2

成为:

['Alexandra', 2],['Hussain', 8]

由于排序方法按字母顺序询问姓名和人的最高分。我使用元组来完成上面的代码,并希望继续使用元组。 现在我希望能够对它进行排序,使其成为最高的平均值,例如,平均值的排序方法将导致:

[Hussain, 1.66666666667],[Alexandra, 0.6666666666]

这些数字是我所期望的,因为它们是csv文件中最后三个数字的平均值,因为这里忽略了第二列。由于侯赛因的平均成绩最高,他排在第一位。我将不胜感激。

我想做的是以下内容:

我希望能够按照最高平均值到最低的顺序打印出所有学生。由于侯赛因的平均分为1.6,所以他首先打印出来然后打印出亚历山德拉,因为她的平均分数较低。这两个学生来自同一个类(显示在csv文件的第二列),当用户选择要排序的类1时,将打印它们。

TIA

2 个答案:

答案 0 :(得分:1)

假设你有一个类1的列表,如:

class1 = [['Alexandra', 1, 0, 0, 2], ['Hussain', 1, 7, 8, 0]]

然后根据列表

中的第二个元素对此进行排序
##this is class number 1 and you find class 1 people in second index of list by i[1] == 1(class number)
avg_list = [[i[0], float(sum(i[2:]))/len(i[2:])] for i in class1 if i[1] == 1 ]
dd = sorted(avg_list, key=lambda x: x[1])
dd.reverse()
print dd

输出:

[['Hussain', 5.0], ['Alexandra', 0.6666666666666666]]

答案 1 :(得分:0)

在python的sort函数中使用key函数。在这里阅读: https://docs.python.org/3/howto/sorting.html