How that list can be sorted by the inner list elements?
my_list = [[False, 3, 82],[True,15,34], [False,22, 33], [True,2, 5], [False,1,67], [False, 22, 44], [True, 6, 99], [True, 14, 34], [False, 2, 82]]
I need a list at the final like that;
my_list = [[True,2, 5], [True, 2, 99], [True, 14, 34],[True,15,34], [False, 1,67], [False, 2, 82], [False, 3, 44], [False,3, 88], [[False, 22, 44]]
It will check the first elements of the inner lists, if there are more than one “True”, it will check and sort the second elements. If there are the same numbers, than it will check the third elements.
Advertisement
Answer
Use the key parameter of sorted:
import pprint
my_list = [[False, 3, 82], [True, 15, 34], [False, 22, 33],
[True, 2, 5], [False, 1, 67], [False, 22, 44],
[True, 6, 99], [True, 14, 34], [False, 2, 82]]
res = sorted(my_list, key=lambda x: (not x[0], x[1], x[2]))
pprint.pprint(res)
Output
[[True, 2, 5], [True, 6, 99], [True, 14, 34], [True, 15, 34], [False, 1, 67], [False, 2, 82], [False, 3, 82], [False, 22, 33], [False, 22, 44]]
The idea of:
lambda x: (not x[0], x[1], x[2])
is to negate the first argument to put the inner list with True first, then use the normal int comparison for the rest of the elements.