ИМО это не тривиальная вещь. Я бы сказал, что сопоставление действительно требуется.
Итак, скажем, ключевая функция преобразует строку в кортеж кодовых точек, где все не-кириллические c кодовые точки будут сдвинуты на 100000):
import unicodedata
def key(s):
SHIFT = 100000
return tuple(
ord(c) if is_cyrillic(c) else ord(c) + SHIFT
for c in s
)
def is_cyrillic(c):
return unicodedata.name(c).startswith('CYRILLIC')
>>> sorted(('wannt', 'waюnnt'), key=key)
Out[34]: ['waюnnt', 'wannt']
is_cyrillic
можно оптимизировать с помощью предварительной таблицы или кэширования символов кириллицы c из строк базы данных.