【问题标题】:Sorting strings with accented characters in python [duplicate]在python中对带有重音字符的字符串进行排序[重复]
【发布时间】:2011-05-23 11:32:34
【问题描述】:

可能重复:
Python not sorting unicode properly. Strcoll doesn't help.

我正在尝试按字母顺序对一些单词进行排序。这是我的做法:

#!/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”。
  • 本例中没有z,但éo之后,这不是字母顺序。
  • 我还确认它在 2.7 中可以正常工作。一些不是 Python 的错误。
  • 我刚刚尝试使用 python 2.6.1(这是默认的 Snow Leopard 安装),但它没有按预期排序。
  • 那么问题在于 Python 如何与 OS X 交互,而不是与 Python 本身交互。

标签: python sorting collation diacritics


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 2020-05-25
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 2022-10-07
    相关资源
    最近更新 更多