在unicode字符串上的Python词典字符串排序

时间:2015-01-20 05:02:27

标签: string python-3.x unicode

对于ascii字符串'b' > 'a''aa' > 'a',Python的字符串排序非常简单,就像通过词典排序一样。但是当字符串处于unicode时会发生什么?

我希望大于以下行为:

def greater_than(s1, s2):
    return tuple(map(ord, s1)) > tuple(map(ord, s2))

即。我们按字典顺序比较每个序数。这是python的作用吗?

utf-8编码根据序列中的字节数对字符的第一个字节进行编码,按升序排列,因此如果字符串是utf-8编码的,则字节比较可以完成工作。我也想知道比较是否以这种方式实施。

1 个答案:

答案 0 :(得分:0)

此处定义了

PyUnicode_Comparehttp://svn.python.org/projects/python/trunk/Objects/unicodeobject.c

它调用unicode_compare,一个静态函数。您可以看到有两个版本:一个使用" fixups"处理无法直接作为数字进行比较的值,以及一个简单的实现。更聪明的"当前#if 0隐藏了实现,这表明Python只是简单地比较了序数值:

while (len1 > 0 && len2 > 0) {
    Py_UNICODE c1, c2;

    c1 = *s1++;
    c2 = *s2++;

    if (c1 != c2)
        return (c1 < c2) ? -1 : 1;

    len1--; len2--;
}