我如何在 PyICU 中执行 "natural sort"?
How do I do a "natural sort" in PyICU?
使用 PyICU,如何使用 Collator 按 "natural order" 对字符串列表进行排序,即将 10 放在 2 之后而不是之前?
在 ICU 文档 http://userguide.icu-project.org/collation/customization#TOC-Default-Options 中,我可以看到有一个 "numericOrdering" 选项(a.k.a。UCOL_NUMERIC_COLLATION)可以设置为打开或关闭,但是我不知道如何从 Python 代码设置该属性。
您可以在 Collator 实例上使用 .setAttribute
方法。
属性名称和值来自附加到主 icu
模块的枚举:
import icu
collator = icu.Collator.createInstance(icu.Locale('en_US'))
collator.setAttribute(icu.UCollAttribute.NUMERIC_COLLATION, icu.UCollAttributeValue.ON)
sorted(['3 three', '1 one', '10 ten', '2 two'])
# ['1 one', '10 ten', '2 two', '3 three']
sorted(['3 three', '1 one', '10 ten', '2 two'], key=collator.getSortKey)
# ['1 one', '2 two', '3 three', '10 ten']
使用 PyICU,如何使用 Collator 按 "natural order" 对字符串列表进行排序,即将 10 放在 2 之后而不是之前?
在 ICU 文档 http://userguide.icu-project.org/collation/customization#TOC-Default-Options 中,我可以看到有一个 "numericOrdering" 选项(a.k.a。UCOL_NUMERIC_COLLATION)可以设置为打开或关闭,但是我不知道如何从 Python 代码设置该属性。
您可以在 Collator 实例上使用 .setAttribute
方法。
属性名称和值来自附加到主 icu
模块的枚举:
import icu
collator = icu.Collator.createInstance(icu.Locale('en_US'))
collator.setAttribute(icu.UCollAttribute.NUMERIC_COLLATION, icu.UCollAttributeValue.ON)
sorted(['3 three', '1 one', '10 ten', '2 two'])
# ['1 one', '10 ten', '2 two', '3 three']
sorted(['3 three', '1 one', '10 ten', '2 two'], key=collator.getSortKey)
# ['1 one', '2 two', '3 three', '10 ten']