Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sort list of strings by integer suffix

Tags:

python

I have a list of strings:

[song_1, song_3, song_15, song_16, song_4, song_8]

I would like to sort them by the # at the end, unfortunately since the lower numbers aren't "08" and are "8", they are treated as larger than 15 in lexicographical order.

I know I have to pass a key to the sort function, I saw this somewhere on this site to sort decimal numbers that are strings:

sorted(the_list, key=lambda a:map(int,a.split('.'))

But that was for "1.2, 2.5, 2.3" but I don't have that case. I thought of replacing '.' with '_' but from what I understand it converts both sides to ints, which will fail since the left side of the _ is a string.

EDIT: I forgot to mention that all the prefixes are the same (song in this example)

like image 701
robev Avatar asked Nov 26 '10 16:11

robev


1 Answers

You're close.

sorted(the_list, key = lambda x: int(x.split("_")[1]))

should do it. This splits on the underscore, takes the second part (i.e. the one after the first underscore), and converts it to integer to use as a key.

like image 70
unwind Avatar answered Oct 13 '22 23:10

unwind