Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sorting a list of lists in Python

c2=[]
row1=[1,22,53]
row2=[14,25,46]
row3=[7,8,9]

c2.append(row2)
c2.append(row1)
c2.append(row3)

c2 is now:

[[14, 25, 46], [1, 22, 53], [7, 8, 9]]

how do i sort c2 in such a way that for example:

for row in c2:

sort on row[2]

the result would be:

[[7,8,9],[14,25,46],[1,22,53]]

the other question is how do i first sort by row[2] and within that set by row[1]

like image 850
Alex Gordon Avatar asked Aug 03 '10 16:08

Alex Gordon


1 Answers

The key argument to sort specifies a function of one argument that is used to extract a comparison key from each list element. So we can create a simple lambda that returns the last element from each row to be used in the sort:

c2.sort(key = lambda row: row[2])

A lambda is a simple anonymous function. It's handy when you want to create a simple single use function like this. The equivalent code not using a lambda would be:

def sort_key(row):
    return row[2]

c2.sort(key = sort_key)

If you want to sort on more entries, just make the key function return a tuple containing the values you wish to sort on in order of importance. For example:

c2.sort(key = lambda row: (row[2],row[1]))

or:

c2.sort(key = lambda row: (row[2],row[1],row[0]))
like image 133
Dave Webb Avatar answered Sep 24 '22 08:09

Dave Webb