2015-04-10 7 views
2

Я смог преобразовать файл 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 для сортировки.

ТИА

+0

что вы хотите? нужна сортировка только для самых высоких средних? Нужна выборка ввода и вывода, которую вы хотите –

+0

Да, это правильно, я хочу сортировать классы, которые пользователь выбирает. Выбранный класс нужно будет отсортировать с наивысших средних до самых низких. Образец будет Hussain и Alexandra из класса 1. Поэтому, когда пользователь выбирает класс 1, он будет сортироваться с наивысших до самых низких средних только в этом классе. Надеюсь, что это имело больше смысла. – Hussain

ответ

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]] 
+0

Дело в том, что мне нужно сначала сделать средние значения из кортежей, которые у меня есть. Кортеж для обоих учеников выглядит примерно так: [Hussain, 1, 7, 8, 0], [Alexandra, 1, 0, 0, 2] Но мне нужны последние три значения, чтобы средний показатель сортировал его с самого высокого на самые низкие средние значения. – Hussain

+0

Что вы хотите показать на выходе? этот тип [Хуссейн, 1, 7, 8, 0], [Alexandra, 1, 0, 0, 2] или этот тип ['Hussain', 1.66666666667], ['Alexandra', 0.6666666666 –

+0

@ Hussain- как этот ответ? –

Смежные вопросы