jealopez
jealopez

Reputation: 121

How to sort a list of lists (non integers)?

I have a list of lists that looks like this:

[['10.2100', '0.93956088E+01'],
 ['11.1100', '0.96414905E+01'],
 ['12.1100', '0.98638361E+01'],
 ['14.1100', '0.12764182E+02'],
 ['16.1100', '0.16235739E+02'],
 ['18.1100', '0.11399972E+02'],
 ['20.1100', '0.76444933E+01'],
 ['25.1100', '0.37823686E+01'],
 ['30.1100', '0.23552237E+01'],...] 

(here it looks as if it is already ordered, but some of the rest of the elements not included here to avoid a huge list, are not in order)
and I want to sort it by the first element of each pair, I have seen several very similar questions, but in all the cases the examples are with integers, I don't know if that is why when I use the list.sort(key=lambda x: x[0]) or the sorter, or the version with the operator.itemgetter(0) I get the following:

[['10.2100', '0.93956088E+01'],
 ['100.1100', '0.33752517E+00'],
 ['11.1100', '0.96414905E+01'],
 ['110.1100', '0.25774972E+00'],
 ['12.1100', '0.98638361E+01'],
 ['14.1100', '0.12764182E+02'],
 ['14.6100', '0.14123326E+02'],
 ['15.1100', '0.15451733E+02'],
 ['16.1100', '0.16235739E+02'],
 ['16.6100', '0.15351242E+02'],
 ['17.1100', '0.14040859E+02'],
 ['18.1100', '0.11399972E+02'], ...]

apparently what is doing is sorting by the first character appearing in the first element of each pair.

Is there a way of using list.sort or sorted() for ordering this pairs with respect to the first element?

Upvotes: 0

Views: 142

Answers (1)

Joran Beasley
Joran Beasley

Reputation: 113988

dont use list as a variable name!

some_list.sort(key=lambda x: float(x[0]) )

will convert the first element to a float and comparit numerically instead of alphabetically

(note the cast to float is only for comparing... the item is still a string in the list)

Upvotes: 5

Related Questions