2014-11-19 2 views
0

Я хочу отсортировать файл CSV с первым столбцом. В первом столбце есть строки, но значения - это числа. Поэтому я хочу отсортировать его как целое. Я знаю, что может разобраться с помощью следующего -Сортировка файла CSV на основе столбца строки как целочисленное сравнение

sortedList = sorted(mycsv, key=lambda t: float(t[0])) 

Но это дает следующее сообщение об ошибке -

ValueError: invalid literal for float(): 14,481.72 

Я прочитал пару С.О. вопросов, как this и выяснил, что решение избавиться от этого ошибка в этом -

float(value.replace(',','')) 

Однако я не знаю, как это сделать при сортировке с использованием лямбда-функции. Я как-то не могу поместить эту логику в первую строку кода.

ответ

0

Просто замените в lambda, вы хотите отсортировать по t[0] первый элемент, так что вам нужно преобразовать этот элемент к float в вашем lambda:

float(t[0].replace(",","")) 

sorted(mycsv, key=lambda t: float(t[0].replace(",",""))) 

In [12]: l = ["5,543.23","14,481.72","10,1000.34","8,581.72"] 

In [13]: sorted(l, key=lambda t: float(t.replace(",",""))) 
Out[13]: ['5,543.23', '8,581.72', '14,481.72', '10,1000.34']