Возможный дубликат:
Python не сортирует юникод правильно. Strcoll не помогает.
Я пытаюсь отсортировать некоторые слова в алфавитном порядке. Вот как я это делаю:
#!/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")
Я ожидаю, что слова будут напечатаны в том же порядке, в котором они определены, но вот что я получаю:
locale: ('fr_FR', 'UTF8')
liche
lichen
licher
lichoter
lichée
lichénoïde
Символ é обрабатывается так, как если бы он был больше z.
Кажется, я неправильно понимаю, как locale.strcoll
сравнивает строки. Какую функцию сравнения следует использовать для сортировки слов по алфавиту?
z
, ноé
идет послеo
, что не является алфавитным порядком. - person 0xced   schedule 10.12.2010/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py
простоreturn cmp(a,b)
Какая у вас? - person 0xced   schedule 10.12.2010_locale
(который будет скомпилирован кодом), по крайней мере, в моей системе Linux. - person Thomas K   schedule 10.12.2010