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)