Код: Выделить всё
names = [
"cote",
"coté",
"côte",
"côté",
"ReasonE",
"Reason1",
"ReasonĔ",
"Reason Super",
"ReasonÅ",
"ReasonA",
"Reasona",
"Reasone",
"death",
"deluge",
"de luge",
"disílva John",
"diSilva John",
"di Silva Fred",
"diSilva Fred",
"disílva Fred",
"di Silva John",
]
expected = [
"cote",
"côte",
"coté",
"côté",
"death",
"deluge",
"de luge",
"di Silva Fred",
"diSilva Fred",
"disílva Fred",
"di Silva John",
"diSilva John",
"disílva John",
"Reason1",
"Reasona",
"ReasonA",
"ReasonÅ",
"Reasone",
"ReasonE",
"ReasonĔ",
"Reason Super",
]
assert sorted(names, key=some_sort_key) == expected
Код: Выделить всё
loc = icu.Locale("und-u-ka-shifted-kb-true")
c = icu.Collator.createInstance(loc)
assert sorted(names, key=c.getSortKey) == expected
Я пытаюсь воспроизвести (в Python) поведение сортировки из базы данных AWS Postgres. Лучшее, что я могу понять, это то, что у него есть собственные правила для пробелов/пунктуации, основанные на опции «обрезание по сдвигу», а также «обратный акцент» (
Код: Выделить всё
kb-trueICU, похоже, не поддерживает обрезку по сдвигу, и я не знаю, как еще я могу заставить их сортироваться «правильно».
Для получения дополнительных объяснений см. настройки сортировки и контекстную чувствительность.>
Подробнее здесь: https://stackoverflow.com/questions/790 ... ft-trimmed