5

可能重复:
如何在 Python 中按字母顺序对 unicode 字符串进行排序?

作为世界其他地区的公民,我对计算机默认不适应处理国际问题这一事实感到非常恼火。许多网站仍然不使用 Unicode,PHP 仍处于黑暗时代。

当我想对罗马尼亚语中的单词或名称列表进行排序时,我总是必须编写自己的函数,这几乎没有效率。必须有一些区域设置使排序函数遵循指定语言的字母顺序,对吧?

我主要对 Python、Java 和 JavaScript 感兴趣。

编辑:正如 Chris Morgan 所指出的,我在这里找到了 Python 的答案。

4

2 回答 2

7

在 Python 中,您始终可以使用带键参数的排序函数。例如,在土耳其语中,我们有 'ç'、'ı'、'ş' 等字母。如果我想根据该字母排序,我会使用对字母进行排序的键字符串,并根据这个,像这样:

>>> letters="abcçdefgğhıijklmnoöprsştuüvyz" #Turkish alphabet
>>> sorted("açobzöğge")
['a', 'b', 'e', 'g', 'o', 'z', 'ç', 'ö', 'ğ'] #Python's default
>>> sorted("açobzöğge", key=lambda i: letters.index(i))
['a', 'b', 'ç', 'e', 'g', 'ğ', 'o', 'ö', 'z'] #With key parameter

注意:使用 Python 3;处理 Unicode 更容易。

编辑,正如评论所说,如果我们使用字典,这个过程会更有效:

>>> letters="abcçdefgğhıijklmnoöprsştuüvyz"
>>> d={i:letters.index(i) for i in letters}
>>> sorted("açobzöğge", key=d.get)
['a', 'b', 'ç', 'e', 'g', 'ğ', 'o', 'ö', 'z']
于 2011-05-19T10:11:39.680 回答
3

没有一个统一的排序算法适用于所有语言,因为许多语言都有非常具体的排序规则。

它甚至更进一步:即使在一种语言中,排序算法也会根据它的用途而有所不同(例如,在德语词典中的排序与电话簿略有不同)。

整个主题称为Collat​​ion关于整理顺序的维基百科文章也很相关。

似乎有一个项目可以为许多语言实现正确的排序规则,称为python-collat​​e

于 2011-05-19T10:44:13.363 回答