I have a list of lists. For example,
[
[0,1,\'f\'],
[4,2,\'t\'],
[9,4,\'afsd\']
]
If I wanted to sort the outer list by the string field of the inner lists, how would you do that in python?
I have a list of lists. For example,
[
[0,1,\'f\'],
[4,2,\'t\'],
[9,4,\'afsd\']
]
If I wanted to sort the outer list by the string field of the inner lists, how would you do that in python?
This is a job for itemgetter
>>> from operator import itemgetter
>>> L=[[0, 1, \'f\'], [4, 2, \'t\'], [9, 4, \'afsd\']]
>>> sorted(L, key=itemgetter(2))
[[9, 4, \'afsd\'], [0, 1, \'f\'], [4, 2, \'t\']]
It is also possible to use a lambda function here, however the lambda function is slower in this simple case
in place
>>> l = [[0, 1, \'f\'], [4, 2, \'t\'], [9, 4, \'afsd\']]
>>> l.sort(key=lambda x: x[2])
not in place using sorted:
>>> sorted(l, key=lambda x: x[2])
Itemgetter lets you to sort by multiple criteria / columns:
sorted_list = sorted(list_to_sort, key=itemgetter(2,0,1))
Like this:
import operator
l = [...]
sorted_list = sorted(l, key=operator.itemgetter(desired_item_index))
multiple criteria can also be implemented through lambda function
sorted_list = sorted(list_to_sort, key=lambda x: (x[1], x[0]))
I think lambda function can solve your problem.
old_list = [[0,1,\'f\'], [4,2,\'t\'],[9,4,\'afsd\']]
#let\'s assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])
#Resulst of new_list will be:
[[9, 4, \'afsd\'], [0, 1, \'f\'], [4, 2, \'t\']]
array.sort(key = lambda x:x[1])
You can easily sort using this snippet, where 1 is the index of the element.
More easy to understand (What is Lambda actually doing):
ls2=[[0,1,\'f\'],[4,2,\'t\'],[9,4,\'afsd\']]
def thirdItem(ls):
#return the third item of the list
return ls[2]
#Sort according to what the thirdItem function return
ls2.sort(key=thirdItem)