简体   繁体   中英

python sort list of lists based on inner element AND ignore case

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?

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 .

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM