Sort strings of ints and save original index

Question:

I would like to sort lists of the following form:

['1000-1005', '6767-8787', '88-5607', '600-607', '909-950']

by the integer value before the ‘-‘ symbol and also store the original index after sorting, so something like this:

[(2, '88-5607'), (3, '600-607'), (4, '909-950'), (0, '1000-1005'), (1, '6767-8787')]

Where the tuples in the output list contain the original index position followed by the sorted value

Is there an easy way to do this?

If I want to sort by the first number without saving original indices, this works:

sorted(list, key=lambda x: int(x.split('-')[0]))

and if I want to save the original indices after extracting the first integer value, this works:

sorted(enumerate(list), key=lambda i: i[1])

but combining the approaches doesn’t work since they both eat up the key function definition.

Asked By: Ryan

||

Answers:

Try:

res = sorted(enumerate(['1000-1005', '6767-8787', '88-5607', '600-607', '909-950']), 
             key=lambda x: int(x[1].split('-')[0]))
print(res)

Prints:

[(2, '88-5607'), (3, '600-607'), (4, '909-950'), (0, '1000-1005'), (1, '6767-8787')]
Answered By: I'mahdi
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.