Ответ 1
l = [["blaa", "0.3", "bli"], ["bla", "0.1", "blub"], ["bla", "-0.2", "blub"]]
l.sort(key=lambda x: float(x[1]))
>>> [['bla', '-0.2', 'blub'], ['bla', '0.1', 'blub'], ['blaa', '0.3', 'bli']]
Я знаю, что подобные вопросы задавались уже несколько раз. И теперь я использую функцию поиска, но она по-прежнему не работает.
Итак, вот настройка проблемы. У меня есть список списков, содержащих строки. Один столбец содержит строки, которые фактически представляют значения float. И это также столбец, который я хочу сортировать. Проблема в том, что python, кажется, игнорирует знак - (минус) на входах. Итак, список примеров:
[[blaa, '0.3', bli], [bla, '0.1', blub], [bla, '-0.2', blub]]
сортируется следующим образом:
[[bla, '0.1', blub], [bla, '-0.2', blub], [blaa, '0.3', bli]]
а не как это должно быть:
[[bla, '-0.2', blub],[bla, '0.1', blub], [blaa, '0.3', bli]]
До сих пор я пробовал:
как:
for i in mylist:
i[1] = float(i[1])
mylist.sort(key=lambda x: x[1])
или
for i in mylist:
i[1] = float(i[1])
mylist.sort(key=operator.itemgetter(1))
как:
mylist.sort(cmp=lambda x,y: cmp(float(x), float(y)), key=operator.itemgetter(1))
И любая другая комбинация вышеуказанных методов, также то же самое с sorted
. До сих пор без успеха знак минус игнорируется каждый раз. Как это решить?
[править] И уже попробовал предложение Игнасио. Я должен упомянуть, что я должен использовать python 2.5.
l = [["blaa", "0.3", "bli"], ["bla", "0.1", "blub"], ["bla", "-0.2", "blub"]]
l.sort(key=lambda x: float(x[1]))
>>> [['bla', '-0.2', 'blub'], ['bla', '0.1', 'blub'], ['blaa', '0.3', 'bli']]
Шахта отлично работает, Python 3.1.2:
>>> l=[['', '0.3', ''], ['', '0.1', ''], ['', '-0.2', '']]
>>> sorted(l,key=lambda x:float(x[1]))
[['', '-0.2', ''], ['', '0.1', ''], ['', '0.3', '']]
и 2.6.5:
>>> l=[['', '0.3', ''], ['', '0.1', ''], ['', '-0.2', '']]
>>> sorted(l,key=lambda x:float(x[1]))
[['', '-0.2', ''], ['', '0.1', ''], ['', '0.3', '']]