0

As a beginner of Python I recently get stuck for a problem of sorting a nested list with specific criteria. I have a nested list like this:

nestedList=[['R2D2','1path1','1path2'], 
            ['R3A1','2path1','2path2'],
            ['R15L2','3path1','3path2']]

I would like this list to be sorted by the first string in each nested list. The result would look like:

nestedList=[['R15L2','3path1','3path2'],
            ['R3A1','2paht1','2path2'],
            ['R2D2','1path1','1path2']]

Currently my solution is only use the sort function with reverse parameter:

nestedList.sort(reverse=True)

I am not sure whether this is safe, because I would like it not sort the list also by the second string.

How could I sort it only by the first string? (e.g. 'R15L2', 'R3A1', etc.)

Thanks a lot for your help!

4
  • My method is not really working though... for example, changing '1path1' to '5path1' will not get the expected result... :( Commented Apr 9, 2013 at 9:57
  • I don't understand the result that you want. 'R3A1' is larger than 'R2D2' but comes before it in your sorted list? Commented Apr 9, 2013 at 9:59
  • hmm... I was considering R15L2>R3A1>R2D2... perhaps this is more complicated than I expected... Commented Apr 9, 2013 at 10:06
  • 1
    If you want to sort by numeric value you have to get numeric values first. Convert "R15L2" to ('R', 15, 'L', 2) and you can sort correctly. Commented Apr 9, 2013 at 10:17

2 Answers 2

5

You want to sort according to a key (the key is the first element of a list):

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

or

import operator as op

nestedList.sort(key=op.itemgetter(0))
Sign up to request clarification or add additional context in comments.

Comments

1
 a = [['3f','2f','5a'],['5a','0r','7v'],['4r','58v','5l']]
>>> a
[['3f', '2f', '5a'], ['5a', '0r', '7v'], ['4r', '58v', '5l']]
>>> a.sort()
>>> a
[['3f', '2f', '5a'], ['4r', '58v', '5l'], ['5a', '0r', '7v']]
>>> a.sort(reverse=True)
>>> a
[['5a', '0r', '7v'], ['4r', '58v', '5l'], ['3f', '2f', '5a']]
>>> 

1 Comment

Sorry.. Not sure what are you trying to say... I have this solution already, but it seems not entirely correct...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.