2016-12-29 5 views
0

У меня есть список, содержащий списки кортежей, и я хочу отсортировать эти подсписки по второму элементу, который представляет собой число от 0,0 до 10,0.Невозможно сортировать список списков

for i in range(0, len(data)): 
    data[i] = sorted(data[i], key=itemgetter(1), reverse=True) 

Это все сортируется, как я ожидал, но один элемент не который:

<type 'list'>: [('String1', '7.5', '', '', None), ('String2', '7.5', '', '', None), ('String3', '10.0', '', '', None)]

Этот список остается, как она выше, хотя он должен иметь элемент с 10,0 спереди.

Почему это не сортировка этой строки, но все остальные? Это потому, что он имеет 7.5 в два раза?

+4

Обратите внимание, что вывод из '' 7.5 '> '10 .0'' отличается от вывода из '7.5> 10.0' ... – jonrsharpe

+0

, как выглядят ваши исходные' данные'? и что бы вы хотели получить? –

ответ

1

Вам необходимо отсортировать значения в float не как str

>>> sorted(data[i], key=lambda j: float(j[1]), reverse=True) 
[('String3', '10.0', '', '', None), ('String1', '7.5', '', '', None), ('String2', '7.5', '', '', None)] 

В противном случае, как написано, что вы сравниваете струнам

'7.5' > '10.0' 

который является lexicographical comparison

0

Вы хотите, как float

data[i] = sorted(data[i], key=lambda x: float(x[1]), reverse=True) 
0

Ваши данные символы, и

>>> "10" < "7" 
True 
>>> 

Преобразовать плавать, либо в функции сравнения сортировки или в ваших данных, если это правильное место для этого.

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