Я хочу сортировать список по первому значению в каждом кортеже, однако мой код не производит никакого реального отсортированного списка, хотя порядок списка меняется. Мой список содержит кортежи со значением для «PlayerCode», который является уникальным ключом для каждого игрока. И «Средние очки», которые являются средним количеством очков, которые игрок оценивает каждую игру. Я хочу отсортировать этот список по «Средним точкам», хотя я не могу понять, как это правильно. Вот мой кодСортировка списка кортежей по первому значению
def getKey(item):
return item[0]
def sortByPoints():
foundPlayers = []
with open ('PlayerList.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
foundPlayers.append((row['Average PTS'], row['PlayerCode']))
print(foundPlayers)
sortedPlayers = sorted(foundPlayers, key = getKey)
print (sortedPlayers)
Как я уже сказал, это действительно изменяет порядок списка, но не так, как им ищет, не могу я вижу реальную картину, в которой он изменил его. Я использую Python 3.4
Вот выход из двух списков
несортированными: [('7', '1'), ('8', '2'), ('4' , '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' , '8'), ('10', '9'), ('2', '10'), ('4', '11'), ('2', '12'), ('3' ('4', '14'), ('2', '15')]
отсортировано по: [('0', '5'), ('10', ' 7 '), (' 10 ',' 9 '), (' 18 ',' 6 '), (' 2 ',' 10 '), (' 2 ',' 12 '), (' 2 ',' 15 '), (' 28 ',' 4 '), (' 3 ',' 13 '), (' 4 ',' 3 '), (' 4 ',' 11 '), (' 4 ',' 14 '), (' 7 ',' 1 '), (' 8 ',' 2 '), (' 9 ',' 8 ')]
Обратите внимание, что сортировка по первому варианту v alue - это ** default sort ** для кортежей. Помимо этого, без [mcve], непонятно, какова ваша проблема. – jonrsharpe
вы хотите отсортировать, то на основе целочисленного значения, это строки в данный момент, поэтому вы можете просто изменить функцию getKey для возврата int (item [0]) – chatton
Вы можете использовать строки, если хотите, просто отсортируйте используя 'float' - см. http://stackoverflow.com/a/17474264/2178980 (на самом деле вышеприведенный комментарий также будет делать трюк) – Eugene