Reputation: 1953
let's say I have the following list in python
[ [1,"C"], [2, "D"], [3,"a"], [4,"b"] ]
I would like to sort the list by the letters so it would be
[ [3,"a"], [4,"b"], [1,"C"], [2, "D"] ]
To sort by the inner character, I would do sorted(unsortedlist, key=itemgetter(1))
.
To sort by ignoring case, I would do sorted(unsortedlist, key=str.lower)
.
How do I sort by an inner element AND ignoring case at the same time?
Upvotes: 4
Views: 1251
Reputation: 363213
It's one of the (rare) use-cases for an anonymous function:
>>> sorted([[1, 'C'], [2, 'D'], [3, 'a'], [4, 'b']], key=lambda x: x[1].lower())
[[3, 'a'], [4, 'b'], [1, 'C'], [2, 'D']]
Lambdas are generally a bit clunky and unpythonic, but unfortunately, there is no "compose" function built-in to python.
Upvotes: 7
Reputation: 59178
Either a lambda:
sorted(unsortedlist, key=lambda x: x[1].lower())
or a regular function:
def my_key(x):
return x[1].lower()
sorted(unsortedlist, key=my_key)
Upvotes: 4