2010-12-10 6 views
2

dupliquées possible:
Python not sorting unicode properly. Strcoll doesn't help.chaînes de tri avec les caractères accentués en python

Je suis en train de trier quelques mots par ordre alphabétique. Voici comment je le fais:

#!/opt/local/bin/python2.7 
# -*- coding: utf-8 -*- 

import locale 

# Make sure the locale is in french 
locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8") 
print "locale: " + str(locale.getlocale()) 

# The words are in alphabetical order 
words = ["liche", "lichée", "lichen", "lichénoïde", "licher", "lichoter"] 

for word in sorted(words, cmp=locale.strcoll): 
    print word.decode("string-escape") 

J'attends que les mots sont imprimés dans le même ordre que sont définis, mais voici ce que je reçois:

locale: ('fr_FR', 'UTF8') 
liche 
lichen 
licher 
lichoter 
lichée 
lichénoïde 

Le é le caractère est traité comme s'il était supérieur à z.

Il semble que je ne comprenne pas comment locale.strcoll compare les chaînes. Quelle fonction de comparaison devrais-je utiliser pour obtenir les mots classés par ordre alphabétique?

+0

Il semble que cela fonctionne correctement. Je ne peux pas voir "z". –

+0

Il n'y a pas de 'z' dans cet exemple, mais le' é' vient après le 'o', ce qui n'est pas l'ordre alphabétique. – 0xced

+0

Fonctionne bien dans 2.6.4. –

Répondre

1

J'ai finalement choisi de strip diacritics et comparer la version dépouillée des cordes pour que je n'ai pas ajouter la dépendance PyICU.

Questions connexes