Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to sort a python list, based on different indices?

For instance, we have a list of list.
The list should be reverse sorted based on some index i, and if there is tie, they should be sorted in ascending or descending order based on the condition.

For eg:

The list is [['A', 2, 4.2], ['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5]]

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

How to sort this so that the result is:

  • [['B', 4, 4.5], ['A', 2, 4.2], ['D', 2, 3.5], ['C', 2, 3.3]]
  • [['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5], ['A', 2, 4.2]]

In first condition, i want them to be sorted in descending order based on index 1, and then again on descending order on index 2 if there is tie on index 1.

In second condition, i want them to be sorted in descending order based on index 1, and then in ascending order on index 2 if there is tie on index 1.

>Solution :

What I can think of is what follows:

myList = [['A', 2, 4.2], ['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5]]
print(sorted(myList, key= lambda x: (x[1], x[2]), reverse=True))
print(sorted(myList, key= lambda x: (x[1], -1*x[2]), reverse=True))

Output

[['B', 4, 4.5], ['A', 2, 4.2], ['D', 2, 3.5], ['C', 2, 3.3]]
[['B', 4, 4.5], ['C', 2, 3.3], ['D', 2, 3.5], ['A', 2, 4.2]]

Explnatation

sorted function takes two argument: an iterable which can be a list, set or anything that is iterable, and a key, which defines the pattern of sorting. In the key argument, I have defined a tuple ((x[1], x[2])) that indicates the order of sorting, if the element with index 1 is tie, the it goes to check index number 2. The second sorted function is same, but when it goes to element with index number 2, it check its negative value in order to sort them in a ascending order.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading