2

如何在 Python 中对 Google 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

1 回答 1

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)

最好建议您在内部保留unicode字符串列表——一次解码 utf8 输入并在需要时在输出上编码回 utf8——但只要你愿意重复支付解码计算成本/延迟,这种纯 Python 方法应该可以在 App Engine 或其他任何地方正常工作。

如果您确实遵循仅在unicode内部保留字符串的最佳实践(在输入上解码,如果需要在输出上编码),那么排序也可以使用key=lambda s: map(dsort.get, s)- 但我个人更喜欢使用命名函数(为了清楚起见)而不是有点傻的 lambda。只是风格问题,真的。

于 2015-08-14T21:35:07.897 回答