Is there a way to use the sort() method or any other method to sort a list by column? Lets say I have the list:
[
[John,2],
[Jim,9],
[Jason,1]
]
And I wanted to sort it so that it would look like this:
[
[Jason,1],
[John,2],
[Jim,9],
]
What would be the best approach to do this?
Edit:
Right now I am running into an index out of range error. I have a 2 dimensional array that is lets say 1000 rows b 3 columns. I want to sort it based on the third column. Is this the right code for that?
sorted_list = sorted(list_not_sorted, key=lambda x:x[2])
below solution worked for me in case of required number is float. Solution:
table=sorted(table,key=lambda x: float(x[5]))
for row in table[:]:
Ntable.add_row(row)
'
sorted(list, key=lambda x: x[1])
Note: this works on time variable too.
You can use list.sort
with its optional key
parameter and a lambda
expression:
>>> lst = [
... ['John',2],
... ['Jim',9],
... ['Jason',1]
... ]
>>> lst.sort(key=lambda x:x[1])
>>> lst
[['Jason', 1], ['John', 2], ['Jim', 9]]
>>>
This will sort the list in-place.
Note that for large lists, it will be faster to use operator.itemgetter
instead of a lambda
:
>>> from operator import itemgetter
>>> lst = [
... ['John',2],
... ['Jim',9],
... ['Jason',1]
... ]
>>> lst.sort(key=itemgetter(1))
>>> lst
[['Jason', 1], ['John', 2], ['Jim', 9]]
>>>
You can use the sorted method with a key.
sorted(a, key=lambda x : x[1])
The optional key
parameter to sort
/sorted
is a function. The function is called for each item and the return values determine the ordering of the sort
>>> lst = [['John', 2], ['Jim', 9], ['Jason', 1]]
>>> def my_key_func(item):
... print("The key for {} is {}".format(item, item[1]))
... return item[1]
...
>>> sorted(lst, key=my_key_func)
The key for ['John', 2] is 2
The key for ['Jim', 9] is 9
The key for ['Jason', 1] is 1
[['Jason', 1], ['John', 2], ['Jim', 9]]
taking the print
out of the function leaves
>>> def my_key_func(item):
... return item[1]
This function is simple enough to write "inline" as a lambda function
>>> sorted(lst, key=lambda item: item[1])
[['Jason', 1], ['John', 2], ['Jim', 9]]
Source: Stackoverflow.com