Python Sort a list by multiple attributes with one line of code
Suppose we have a list of record
1
2
3
4
5
6
7
| records =( (department, name, salary), (department, name, salary), ... (department, name, salary)) |
Then we want to sort the records first by 'department', and then by 'salary'
Maybe it would a little complex in other programming language. But in python, it would be as simple as one line as follows:
1
2
3
| records.sort( key = lambda l: (l[0], l[2])) |
I think this is the amazing part of functional programming that you can create an anonymous inline function to do this.
Suppose we have another dictionary { name: ages } linked with the records list, we can also do sorting according to some external as follows :
1
2
3
| record.sort( key = lambda l:( l[0], dictionary_age(l[1]) )) |
If you want to rank the records in descending order, just set reverse = True; if you want to rank in a way that one attribute in descending order and one in ascending order, you have to a cmp function.
Done!

Post a Comment