3

This query is somewhat related to this earlier one on sorting

where, it was required to sort the following list,

data = [[1, .45, 0], [2, .49, 2], [3, .98, 0], [4, .82, 1], [5, .77, 1], [6, .98, 2] ]

first by the values of the last member of the inner list like this way,

[[1, .45, 0], [3, .98, 0],[4, .82, 1], [5, .77, 1], [2, .49, 2], [6, .98, 2]]

and then sort within the sub-lists i.e. first sort the list with its last member as '0' using the middle member as the key, in descending order, then the sub-list with last member as '1' and so on.

Now, instead of first sorting by the values of the last member, I would like like to sort based upon the order of these elements present in an external list. i.e. if the external list is List_1

`List_1 = [2, 0, 1]`

Sorting should produce

[[2, .49, 2], [6, .98, 2] [1, .45, 0], [3, .98, 0], [4, .82, 1], [5, .77, 1]]

Finally, sorting the sub-lists based upon the middle element in descending order should produce:

[ [6, .98, 2],[2, .49, 2],   [3, .98, 0], [1, .45, 0], [4, .82, 1], [5, .77, 1]]

Any suggestions on how to go about this ?

0

1 Answer 1

5

Use list.index in the key:

>>> data = [[1, .45, 0], [2, .49, 2], [3, .98, 0], [4, .82, 1],
            [5, .77, 1], [6, .98, 2]]
>>> List_1 = [2, 0, 1]
>>> sorted(data, key=lambda e: (List_1.index(e[2]), -e[1]))
[[6, 0.98, 2], [2, 0.49, 2], [3, 0.98, 0], [1, 0.45, 0],
 [4, 0.82, 1], [5, 0.77, 1]]
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.