How can I sort a list of lists by one of the items in the sublists?

Question:

I have a list which looks as follows:

list = [[u'scheixdfunwetter', u'storm', u'0.0007813'], [u'scheixdfunwetter', u'goddamn', u'0.0002343'], [u'ingenieurin', u'night', u'0.0000442'], [u'ingenieurin', u'you', u'0.0000008'], [u'ingenieurin', u'NULL', u'0.0000004'], [u'ingenieurin', u'last', u'0.0000472'], [u'ingenieurin', u'anything', u'0.0000328']]

I’d like to sort this list by the number (=probability).
Looking through previous questions/answers on Stackoverflow, I found the following solution, which seems to have worked for the list (li = [['a1', 1, 1.56], ['b3', '6', 9.28], ['c2', 1, 6.25]...]):

list.sort(key=itemgetter(2))

With my data however, this does not work and returns NONE.
As I thought that it had to do with the number being a string, I tried the following:

sorted_list = list.sort(key=lambda x: int(x[2]))

, but this returns another error:

ValueError: invalid literal for int() with base 10: '0.0000723'

Can anyone help?

Asked By: user3265565

||

Answers:

In [24]: sorted(seq, key=lambda x: float(x[2]))
Out[24]: 
[[u'ingenieurin', u'NULL', u'0.0000004'],
 [u'ingenieurin', u'you', u'0.0000008'],
 [u'ingenieurin', u'anything', u'0.0000328'],
 [u'ingenieurin', u'night', u'0.0000442'],
 [u'ingenieurin', u'last', u'0.0000472'],
 [u'scheixdfunwetter', u'goddamn', u'0.0002343'],
 [u'scheixdfunwetter', u'storm', u'0.0007813']]
  • Use float instead of int.
  • Use the sorted function instead of the sort method. The sort method
    returns None and modifies the list in place. The sorted function returns a sorted copy of the list. If you want to assign
    the result to sorted_list, then you need to use the sorted
    function.
  • Never name a variable list, since it shadows the builtin of the
    same name.
Answered By: unutbu

You have to try

>>> list.sort(key=lambda x: x[2])
>>> list
[[u'ingenieurin', u'NULL', u'0.0000004'], [u'ingenieurin', u'you', u'0.0000008'], [u'ingenieurin', u'anything', u'0.0000328'], [u'ingenieurin', u'night', u'0.0000442'], [u'ingenieurin', u'last', u'0.0000472'], [u'scheixdfunwetter', u'goddamn', u'0.0002343'], [u'scheixdfunwetter', u'storm', u'0.0007813']]

list.sort will perform operation on self. It will return None. If you have to create new sorted list then you have to use sorted inbuilt function.

Answered By: Nilesh
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.