2

如何在Python App Engine上对utf-8字符串进行排序?我试图使用本地,但我认为它不会工作,支持的语言数量太小。如何在Python App Engine上对utf-8字符串进行排序?

我想使用pyuca,但它使用起来很重要 - 每次重新加载1MB只使用1 %%进行排序。

是否有一些轻量级的纯Python库或者它以某种方式在Google App Engine中受支持。

如果你认为你有很好的算法,它会通过这个测试(可以随机播放的测试字符串):

alphabet = u'AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻaąbcćdeęfghijklłmnńoóprsśtuwyzźż' 

任何建议是值得欢迎的,我会测试它。这个aplhabet是'pl_pl'/'polish'

回答

4

这里有一个纯Python的方法:

alphabet = u'AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻaąbcćdeęfghijklłmnńoóprsśtuwyzźż' 
dsort = dict((let, i) for i, let in enumerate(alphabet)) 

def key_utf8(utf8_string): 
    s = utf8_string.decode('utf8') 
    return map(dsort.get, s) 

some_list_of_utf8_strings.sort(key=key_utf8) 

你会可能是最好应保持统一的列表串内部 - 如果需要,解码UTF8一次投入和编码回输出UTF8 - 但只要您很高兴能够反复支付解码计算成本/延迟时间,这种纯Python方法应该可以在App Engine或其他任何地方正常工作。

如果遵循的只有永远保持unicode字符串内部(如果需要输出输入解码,编码)的最佳实践,则排序也使用key=lambda s: map(dsort.get, s) - 但我个人更喜欢使用命名函数(为了清晰)而不是有点愚蠢的lambda。只是一个风格问题,真的。

相关问题