2

I have a list of lists like [[1,2,"s"],[1,5,"e"],...] where the 3rd value is always either s or e. How can I call sort() such that the list is sorted based on:

  1. the first index
  2. if the first index is same, s comes first.

Thanks

0

2 Answers 2

3

You can pass custom key function to list.sort that is used to generate the comparison key for the items:

>>> l = [[1, 5, 'e'], [1, 2, 's'], [0, 4, 'e']]
>>> l.sort(key=lambda x: (x[0], -ord(x[2])))
>>> l
[[0, 4, 'e'], [1, 2, 's'], [1, 5, 'e']]
Sign up to request clarification or add additional context in comments.

Comments

1

Write a custom key function.

def sort_key(list_):
    if list_[2] == 's':
        return (list_[0], 0)
    return (list_[0], 1)

test_list = [[1, 2, 's'], [1, 5, 'e'], [2, 4, 'e'], [2, 3, 's']]
test_list.sort(key=sort_key)
# [[1, 2, 's'], [1, 5, 'e'], [2, 3, 's'], [2, 4, 'e']]

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.