Python sorts the list of lists at several levels and sets the order

I have a list of lists my_listfor example.

[
['item 3.1', 'item 3.2', 'item 3.3', 'item 3.4', 'item 3.5'],
['item 3.1', 'item 3.2', 'item 3.2', 'item 3.2', 'item 3.2'],
['item 3.1', 'item 3.2', 'item 3.2', 'item 3.6', 'item 3.2'],
['item 3.1', 'item 2.2', 'item 2.4', 'item 2.7', 'item 2.5'],
['item 2.1', 'item 2.2', 'item 2.3', 'item 2.4', 'item 2.5'],
['item 1.1', 'item 1.2', 'item 1.3', 'item 1.4', 'item 1.5'],
['item 4.1', 'item 4.2', 'item 4.3', 'item 4.4', 'item 4.5'],
['item 1.1', 'item 1.2', 'item 1.3', 'item 1.5', 'item 1.5']
]

I want to order this list at several levels with level 1 being the customer’s order, but I don’t know how to do it.

eg. I want to order by the first element first, and then in this order, order them with the third element, then in that order, order the fourth element. But I want the first element to be ordered / sorted in this order, and not in alphabetical order:

item 4.1
item 2.1
item 3.1
item 1.1

therefore, the final list (after sorting) will look like this:

[
['item 4.1', 'item 4.2', 'item 4.3', 'item 4.4', 'item 4.5']
['item 2.1', 'item 2.2', 'item 2.3', 'item 2.4', 'item 2.5'],
['item 3.1', 'item 3.2', 'item 3.2', 'item 3.2', 'item 3.2'],
['item 3.1', 'item 3.2', 'item 3.2', 'item 3.6', 'item 3.2'],
['item 3.1', 'item 3.2', 'item 3.3', 'item 3.4', 'item 3.5'],
['item 3.1', 'item 2.2', 'item 2.4', 'item 2.7', 'item 2.5'],
['item 1.1', 'item 1.2', 'item 1.3', 'item 1.4', 'item 1.5'],
['item 1.1', 'item 1.2', 'item 1.3', 'item 1.5', 'item 1.5'],
]

I know that I can sort several levels by doing:

s = sorted(my_list, key=itemgetter(0,2,3))

But that would sort them all in alphabetical order and what I don’t know how to do is set the first column to sort by user order.

+5
1

, , , :

order = ['item 4.1', 'item 2.1', 'item 3.1', 'item 1.1']
my_list.sort(key=lambda x: order.index(x[0]))

my_list:

[['item 4.1', 'item 4.2', 'item 4.3', 'item 4.4', 'item 4.5'],
 ['item 2.1', 'item 2.2', 'item 2.3', 'item 2.4', 'item 2.5'],
 ['item 3.1', 'item 3.2', 'item 3.3', 'item 3.4', 'item 3.5'],
 ['item 3.1', 'item 3.2', 'item 3.2', 'item 3.2', 'item 3.2'],
 ['item 3.1', 'item 3.2', 'item 3.2', 'item 3.6', 'item 3.2'],
 ['item 3.1', 'item 2.2', 'item 2.4', 'item 2.7', 'item 2.5'],
 ['item 1.1', 'item 1.2', 'item 1.3', 'item 1.4', 'item 1.5'],
 ['item 1.1', 'item 1.2', 'item 1.3', 'item 1.5', 'item 1.5']]

-, key:

my_list.sort(key=lambda x: (order.index(x[0]), x[2], x[3]))

[['item 4.1', 'item 4.2', 'item 4.3', 'item 4.4', 'item 4.5'],
 ['item 2.1', 'item 2.2', 'item 2.3', 'item 2.4', 'item 2.5'],
 ['item 3.1', 'item 2.2', 'item 2.4', 'item 2.7', 'item 2.5'],
 ['item 3.1', 'item 3.2', 'item 3.2', 'item 3.2', 'item 3.2'],
 ['item 3.1', 'item 3.2', 'item 3.2', 'item 3.6', 'item 3.2'],
 ['item 3.1', 'item 3.2', 'item 3.3', 'item 3.4', 'item 3.5'],
 ['item 1.1', 'item 1.2', 'item 1.3', 'item 1.4', 'item 1.5'],
 ['item 1.1', 'item 1.2', 'item 1.3', 'item 1.5', 'item 1.5']]
+4

All Articles