@redduckrobot

Как отсортировать с украиское подмножество символов кириллицы в Django + SQLite?

Здравствуйте, столкнулся с проблемой сортировки украинских символов, в частности имени начинающегося с буквы "І" (украинская "И"). Этот символ после сортировки оказывается на первом месте (или в конце, в зависимости от направления сортировки). Базу могу использовать только SQLite.

В Django делаю такой запрос:
Employee.objects.all().order_by('name')

Аналогично на SQL:
SELECT name FROM employee ORDER BY name

Результат один и тот же - сперва идут имена начинающиеся на "І", а потом все остальное.

Непосредствнно сам Python3 так же отказывается сортировать как нужно (за исключением строчных символов они летят в конец, заглавные в начало).
>>> l = ['А', 'И', 'І', 'і', 'а', 'и', 'ч']
>>> sorted(l)
['І', 'А', 'И', 'а', 'и', 'ч', 'і']
>>>


Сталкивался ли кто-то с подобными проблемами? Подскажите, пожалуйста, возможные варианты решений.
  • Вопрос задан
  • 190 просмотров
Решения вопроса 1
@redduckrobot Автор вопроса
Решение нашел, может кому пригодится. Чуть ниже "принятого решения этого топика" stackoverflow, код:
# python2.5 code below
# corpus is our unicode() strings collection as a list
corpus = [u"Art", u"Älg", u"Ved", u"Wasa"]

import locale
# this reads the environment and inits the right locale
locale.setlocale(locale.LC_ALL, "")
# alternatively, (but it's bad to hardcode)
# locale.setlocale(locale.LC_ALL, "sv_SE.UTF-8")

corpus.sort(cmp=locale.strcoll)

# in python2.x, locale.strxfrm is broken and does not work for unicode strings
# in python3.x however:
# corpus.sort(key=locale.strxfrm)


Для Django соответсвенно:
emps = list(Employee.objects.all())
emps.sort(key=lambda x: locale.strxfrm(x.name))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Omnic Москва
от 100 000 до 160 000 руб.
CRON Махачкала
от 60 000 до 140 000 руб.
Uploadcare Санкт-Петербург
от 2 800 usd.
19 окт. 2019, в 23:37
1000 руб./в час
19 окт. 2019, в 23:08
500 руб./за проект
19 окт. 2019, в 22:44
12500 руб./за проект