Giovanni Di Milia Giovanni Di Milia - 8 days ago 7
Python Question

python: how to sort a complex list on two different keys

I have a weird list built in the following way:

[[name_d, 5], [name_e, 10], [name_a, 5]]


and I want to sort it first by the number (desc) and then, if the number is the same, by the name (asc). So the result I would like to have is:

[[name_e, 10], [name_a, 5], [name_d, 5]]


I tried to think to a lambda function that I can use in the sort method, but I'm not sure I can do it.

Answer

Sort functions in python allow to pass a function as sort key:

l = [[name_d, 5], [name_e, 10], [name_a, 5]]
# copy
l_sorted = sorted(l, key=lambda x: (x[1] * -1, x[0]))
# in place
l.sort(key=lambda x: (x[1] * -1, x[0])

Edits: 1. Sort order 2. demonstrate copy and in place sorting