Я пытаюсь отсортировать файл с данными с данными, которые выглядят следующим образом:
col_a,col_b,col_c
100,100,100
10,0,0
20,30,30
70,20,80
22,88,45
37,18,73
60,72,6
15,18,56
71,67,78
93,48,74
4,93,73
Я хочу, чтобы сортировка сортировалась по убыванию первого столбца, а затем по убыванию второго, если есть какие-либо связимежду первым и вторым столбцами, затем третьим в том же порядке убывания, если еще есть какие-либо связи, которые должны быть обработаны.
Данные должны быть отсортированы в этом порядке после завершения сортировки по трем столбцам:
100,45,35
87,74,91
71,84,52
70,6,97
70,2,80
5,55,83
5,55,5
И это моя программа:
import csv
import operator
#create an empty list
combined_list = []
#read list of tests from test profile file
with open("data_file.csv") as input_file:
reader = csv.reader(input_file)
header = next(reader) #there is a header row, which I'm ignoring
a_row_list = [[int(row[0]),int(row[1]),int(row[2])] for row in reader]
#add each row read in to the new list
combined_list.append(a_row_list)
#show its type
print(type(combined_list))
#print records
print("1: Read in")
for row in combined_list:
print(row)
#sorted method #1
combined_list = sorted(combined_list, key = operator.itemgetter(1))
print("2: First sort")
for row in combined_list:
print(row)
#sorted method #2
combined_list = sorted(combined_list, key=lambda x: (x[0], x[1], x[2]))
print("3: Second sort")
for row in combined_list:
print(row)
#sorted method #3
combined_list.sort(key = lambda ele : ele[0],ele[1],ele[2])
print("4: Third sort")
for row in combined_list:
print(row)
Однако, похоже, что сортировка не выполняется, какой бы метод я ни пробовал.Вот мой вывод:
$python3 TestSort.py
<class 'list'>
1: Read in
[[100, 45, 35], [5, 55, 5], [5, 55, 83], [70, 2, 80], [70, 6, 97], [87, 74, 91], [71, 84, 52]]
2: First sort
[[100, 45, 35], [5, 55, 5], [5, 55, 83], [70, 2, 80], [70, 6, 97], [87, 74, 91], [71, 84, 52]]
3: Second sort
[[100, 45, 35], [5, 55, 5], [5, 55, 83], [70, 2, 80], [70, 6, 97], [87, 74, 91], [71, 84, 52]]
4: Third sort
[[100, 45, 35], [5, 55, 5], [5, 55, 83], [70, 2, 80], [70, 6, 97], [87, 74, 91], [71, 84, 52]]
Вы можете видеть, что все три вывода выглядят как оригинал, что, как я предполагаю, означает, что сортировка не работает.
Вот некоторая информация об окружении:
python3 --version
Python 3.6.5 :: Anaconda, Inc.
sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.6
BuildVersion: 17G2208
Я преобразовал свои данные в тип данных int, чтобы избежать альфа-сортировки, но я думаю, что мне все еще что-то не хватает.Я считаю, что списки являются изменяемыми, и поэтому предполагаю, что список списков также является изменяемым.
Кроме того, как бы я отсортировал это по нескольким столбцам:
combined_list = sorted(combined_list, key = operator.itemgetter(1))
Наконец, я все ещеучиться быть Pythonic в моем коде, поэтому любые советы будут оценены.
Спасибо