Python сортирует список списков на основе внутреннего элемента И игнорирует регистр

Скажем, у меня есть следующий список в Python

[ [1,"C"], [2, "D"], [3,"a"], [4,"b"] ]

Я хотел бы отсортировать список по буквам, чтобы это было

[ [3,"a"], [4,"b"], [1,"C"], [2, "D"] ]

Чтобы отсортировать по внутреннему характеру, я бы сделал sorted(unsortedlist, key=itemgetter(1)),
Чтобы отсортировать, игнорируя регистр, я бы сделал sorted(unsortedlist, key=str.lower),

Как отсортировать по внутреннему элементу И игнорируя регистр одновременно?

2 ответа

Решение

Это один из (редких) вариантов использования для анонимной функции:

>>> sorted([[1, 'C'], [2, 'D'], [3, 'a'], [4, 'b']], key=lambda x: x[1].lower())
[[3, 'a'], [4, 'b'], [1, 'C'], [2, 'D']]

Лямбды, как правило, немного неуклюжи и не пифоничны, но, к сожалению, в Python нет встроенной функции компоновки.

Либо лямбда:

sorted(unsortedlist, key=lambda x: x[1].lower())

или обычная функция:

def my_key(x):
    return x[1].lower()

sorted(unsortedlist, key=my_key)
Другие вопросы по тегам