【问题标题】:How to sort utf-8 string on Google App Engine in Python?如何在 Python 中对 Google App Engine 上的 utf-8 字符串进行排序?
【发布时间】:2015-08-14 16:58:26
【问题描述】:

如何在 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źż'

欢迎任何建议,我会测试它。这个字母是'pl_pl'/'polish'

【问题讨论】:

    标签: python google-app-engine collation google-app-engine-python


    【解决方案1】:

    这是一种纯 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。真的只是风格问题。

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 2019-04-09
      • 1970-01-01
      • 2011-12-17
      • 2013-06-20
      • 2011-08-24
      • 1970-01-01
      • 2011-10-29
      • 2011-01-22
      相关资源
      最近更新 更多