Я пытаюсь сортировать этот вложенный список по первому элементу внутреннего списка:
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", работают как шарм! Большое спасибо, ребята!
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)
)
ak.sort(cmp=lambda x, y: cmp(x[0].lower(), y[0].lower()))
Забыли ли вы за парны в x[0].lower()
?