在Python中对带重音符的字符串排序

5 投票
1 回答
6865 浏览
提问于 2025-04-16 08:21

可能的重复问题:
Python在排序Unicode时出现问题。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是如何比较字符串的理解有误。我应该使用什么样的比较函数才能让单词按字母顺序排序呢?

1 个回答

2

我最后决定去掉字符上的重音符号,然后比较去掉重音符号后的字符串,这样我就不需要添加PyICU这个依赖了。

撰写回答