2009-04-02 8 views
1

je suis en train de trier cette liste imbriquée par liste intérieure premier élément:insensible à la casse tri alphabétique des listes imbriquées

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 
} 

par python par défaut considère A> a, la sortie que je reçois est donc:

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

J'ai essayé de convertir toutes les valeurs de la liste en casse lors de la comparaison en ajoutant x [0] .lower etc. mais pas d'utilisation. Comment puis-je forcer python (je travaille sur la version 2.4) à faire un tri alphabétique insensible à la casse?

Modifié:

Jarret et Brian, vos hypothèses sur entre parenthèses étaient droite! J'ai oublié de les mettre dedans! Et Jarret, vos suggestions pour ne pas utiliser "cmp" fonctionnent comme un charme! Merci beaucoup les gars!

Répondre

9

Essayez:

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

Je vous recommande d'éviter d'utiliser cmp comme cela a été dépréciée en Python 2.6 et supprimé dans la version 3.0. Je sais que vous utilisez le 2.4, mais la raison pour laquelle le cmp est tombé en disgrâce est que c'est une façon très lente de trier.

Je ne sais pas pourquoi votre effort avec lower a échoué, cependant ... peut-être que vous avez oublié d'utiliser l'appel de fonction par rapport au nom de la fonction? (Ex: cmp(x[0].lower(), y[0].lower()) contre cmp(x[0].lower, y[0].lower))

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

Avez-vous oublié les parens à x[0].lower()?

Questions connexes