排序包含utf-8字符的列表

时间:2012-05-29 01:48:32

标签: python sorting utf-8

问题的开头是Custom sort python

我想用这个字母进行特殊排序

alphabet = u'aáàAâÂbBcCçÇdDeéEfFgGğĞhHiİîÎíīıIjJkKlLmMnNóoOöÖpPqQrRsSşŞtTuUûúÛüÜvVwWxXyYzZ

[aáàAâ] 这组角色应具有相同的优先级。在早期的帖子中,@ happydave建议使用(alphabet.index(c)/ 2),

  

应该将列表中的每对相邻字符映射到   同样优先。

但在我的情况下,我没有一对角色?例如:aáàAâ,eéE,uUûúÛ,óoO,iİîÎíī。

在我看来,简单的方法是添加一个项目,每个列表只包含配对的字符,但我不知道如何实现它。

 [['word1', <Element tag at b719a4cc>], ['word2', <Element tag at b719a6cc>]]

带有一个添加项目的列表列表

[['word1_', 'word1', <Element tag at b719a4cc>], ['word2_', 'word2', <Element tag at b719a6cc>]]

谢谢

2 个答案:

答案 0 :(得分:4)

工作太多了。 Set your locale,然后是key=locale.strxfrm

永远不要排序UTF-8字符;始终先解码为unicode

答案 1 :(得分:4)

s='aáàAâÂbBcCçÇdDeéEfFgGğĞhHiİîÎíīıIjJkKlLmMnNóoOöÖpPqQrRsSşŞtTuUûúÛüÜvVwWxXyYzZ'
s2='aaaaaabbccccddeeeffgggghhiiiiiiiijjkkllmmnnoooooppqqrrssssttuuuuuuuvvwwxxyyzz'
trans = str.maketrans(s, s2)

def unikey(seq):
    return seq[0].translate(trans)

将此功能用作key

sorted参数