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

String unicode字符串上的Python词典字符串排序,string,python-3.x,unicode,String,Python 3.x,Unicode,Python的字符串排序对于ascii字符串“b'>'a'和“aa'>'a”非常简单,就像字典排序一样。但是当字符串是unicode时会发生什么呢 我希望有以下行为: def greater_than(s1, s2): return tuple(map(ord, s1)) > tuple(map(ord, s2)) i、 我们按字典顺序比较每个序数。python就是这样做的吗 编码根据序列中的字节数按递增顺序对字符的第一个字节进行编码,因此,如果字符串是utf-8编码的,字节比较

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

我希望有以下行为:

def greater_than(s1, s2):
    return tuple(map(ord, s1)) > tuple(map(ord, s2))
i、 我们按字典顺序比较每个序数。python就是这样做的吗

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

PyUnicode\u比较在这里定义:

它调用unicode_compare,一个静态函数。您可以看到有两个版本:一个是使用一个修正表来处理不能直接作为数字进行比较的值,另一个是简单的实现。更智能的实现目前被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--;
}

我认为这是在PyUnicode_比较中完成的,还没有找到它的来源。svn回购协议不是有点过时了吗?看起来与2天前更新的版本有很大不同。只是想知道从那以后它是否发生了变化,希望没有。@simonzack:确实如此。我刚刚在谷歌找到了第一个。