python中带重音字符的字符串排序

python中带重音字符的字符串排序,python,sorting,collation,diacritics,Python,Sorting,Collation,Diacritics,可能重复: 我正试着按字母顺序给一些单词排序。我是这样做的: #!/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 alpha

可能重复:

我正试着按字母顺序给一些单词排序。我是这样做的:

#!/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
是如何比较字符串的。我应该使用什么比较器函数来按字母顺序对单词进行排序?

我最终选择对字符串的剥离版本进行比较,这样我就不必添加PyICU依赖项了。

看起来它工作正常。我看不到“z”。在这个例子中没有
z
,但是
é
o
之后,这不是字母顺序。我还确认了它在2.7中工作正常。有些东西不是Python出了问题。我只是尝试了Python2.6.1(这是默认的雪豹安装),但它没有按预期排序。然后问题是Python如何与OS X交互,而不是Python本身。