2009-04-02 2 views
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 
} 

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

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

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

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

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

ответ

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()?

Смежные вопросы