алфавитная сортировка вложенных списков без учета регистра - PullRequest
1 голос
/ 02 апреля 2009

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

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, следовательно, вывод, который я получаю:

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

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

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

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

Ответы [ 2 ]

9 голосов
/ 02 апреля 2009

Попробуйте:

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 голосов
/ 02 апреля 2009
ak.sort(cmp=lambda x, y: cmp(x[0].lower(), y[0].lower()))

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...