Сортировать персидские строки для python

Я хочу использовать функцию сортировки Python, но она не работает хорошо.

sorted( ['ا', 'ب', 'پ', 'ح', 'س', 'ص', 'ف', 'ک', 'ک', 'ک', 'م', 'م']) = 
 ['ا', 'ب', 'ح', 'س', 'ص', 'ف', 'م', 'م', 'پ', 'ک', 'ک', 'ک']

2 ответа

Решение

Попробуйте использовать PyICU:

import PyICU
collator = PyICU.Collator.createInstance(PyICU.Locale('fa_IR.UTF-8'))

print ([i for i in sorted(['ا', 'ب', 'پ', 'ح', 'س', 'ص', 'ف', 'ک', 'ک', 'ک', 'م', 'م'], key=collator.getSortKey)])

Нет, работает хорошо... я верю sorted сортирует символы в зависимости от значения Unicode. Ниже приводится символ Unicode для каждого символа:

ا : \u0627
ب : \u0628
ح : \u062d
س : \u0633
ص : \u0635
ف : \u0641
م : \u0645
پ : \u067e
ک : \u06a9

Как видите, юникод پ является \u067e в то время как Юникод ب является \u0628, И причина этого заключается в ب также арабский символ, такой же, как ا, ح, س, ص, ف, а также م, В то время как پ а также ک не.

Другие вопросы по тегам