алфавитная сортировка вложенных списков без учета регистра

1

Я пытаюсь сортировать этот вложенный список по первому элементу внутреннего списка:

ak = [ ['a',1],['E',2],['C',13],['A',11],['b',9] ]
ak.sort(cmp=lambda x, y: cmp(x[0], y[0]))
for i in ak: {
    print i
}

по умолчанию python считает A > a, поэтому выход я get:

['A', 11] ['C', 13] ['E', 2] ['a', 1] ['b', 9]

Я попытался преобразовать все значения списка в четный случай во время сравнения, добавив x [0].lower и т.д., но не использовать. Как заставить python (я работаю над версией 2.4) делать нечувствительную к регистру сортировку по алфавиту?

Отредактировано:

Джаррет и Брайан, ваш предположения о скобках были правильно! Я забыл положить их! И Джаррет, ваши предложения о том, чтобы не использовать "cmp", работают как шарм! Большое спасибо, ребята!

Теги:

2 ответа

9
Лучший ответ

Try:

ak.sort(key=lambda x:x[0].lower())

Я бы рекомендовал, чтобы вы избежали использования cmp, поскольку это было устарело в Python 2.6 и удалено в версии 3.0. Я знаю, что вы используете 2.4, но причина cmp впала в неудобство в том, что это очень медленный способ сортировки.

Я не уверен, почему ваши усилия с lower не удались, хотя... возможно, вы забыли использовать вызов функции вместо имени функции? (т.е. cmp(x[0].lower(), y[0].lower()) по сравнению с cmp(x[0].lower, y[0].lower))

3
ak.sort(cmp=lambda x, y: cmp(x[0].lower(), y[0].lower()))

Забыли ли вы за парны в x[0].lower()?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню