Как я сортирую строки unicode в алфавитном порядке в Python?

Если Вы хотите проверить тип запроса для предотвращения выполнения чего-либо, когда неправильный метод используется, знают, что можно также определить его в routes.rb файле:

map.connect '/posts/:post_id', :controller => 'posts', :action => 'update', :conditions => {:method => :post} 

или

map.resources :posts, :conditions => {:method => :post} 

метод обновления Вашего PostsController теперь только назовут, когда у Вас эффективно было сообщение. Проверьте документ для ресурсы .

94
задан Georg Schölly 14 February 2011 в 16:00
поделиться

7 ответов

Библиотека IBM ICU делает это (и многое другое). Он имеет привязки Python: PyICU .

Обновление : основное различие в сортировке между ICU и локалью. strcoll заключается в том, что ICU использует полный алгоритм сортировки Unicode , а strcoll использует ISO 14651 .

Различия между этими двумя алгоритмами кратко описаны здесь : http://unicode.org/faq/collation.html#13 . Это довольно экзотические частные случаи, которые редко имеют значение на практике.

>>> import icu # pip install PyICU
>>> sorted(['a','b','c','ä'])
['a', 'b', 'c', 'ä']
>>> collator = icu.Collator.createInstance(icu.Locale('de_DE.UTF-8'))
>>> sorted(['a','b','c','ä'], key=collator.getSortKey)
['a', 'ä', 'b', 'c']
70
ответ дан 24 November 2019 в 06:07
поделиться
9
ответ дан 24 November 2019 в 06:07
поделиться

Джефф Этвуд написал хороший пост на Natural Sort Order , в нем он связался со сценарием, который делает в значительной степени то, что вы просите .

Это ни в коем случае не тривиальный сценарий, но он помогает.

0
ответ дан 24 November 2019 в 06:07
поделиться

Это далеко не полное решение для вашего варианта использования, но вы можете взглянуть на сценарий unaccent.py от effbot. орг. По сути, он удаляет все акценты из текста. Вы можете использовать этот «очищенный» текст для сортировки по алфавиту. (Для лучшего описания см. эту страницу.)

0
ответ дан 24 November 2019 в 06:07
поделиться

Для его реализации вам необходимо прочитать об «Алгоритме сортировки Unicode» видеть http://en.wikipedia.org/wiki/Unicode_collation_algorithm

http://www.unicode.org/unicode/reports/tr10/

пример реализации находится здесь

http: // jtauber.com/blog/2006/01/27/python_unicode_collation_algorithm/

1
ответ дан 24 November 2019 в 06:07
поделиться

Я вижу, что ответы уже сделали отличную работу, просто хотел указать на одну неэффективность кодирования в Human Sort . Чтобы применить выборочный посимвольный перевод к строке юникода s, он использует код:

spec_dict = {'Å':'A', 'Ä':'A'}

def spec_order(s):
    return ''.join([spec_dict.get(ch, ch) for ch in s])

Python имеет гораздо лучший, более быстрый и краткий способ выполнения этой вспомогательной задачи (для строк Unicode - аналогичный метод для байтовые строки имеют другую и несколько менее полезную спецификацию! -):

spec_dict = dict((ord(k), spec_dict[k]) for k in spec_dict)

def spec_order(s):
    return s.translate(spec_dict)

В слове, который вы передаете методу translate , в качестве ключей используются порядковые номера Unicode (не строки), поэтому нам нужен этот шаг восстановления из исходный char-to-char spec_dict . (Значения в dict, который вы передаете для перевода [в отличие от ключей, которые должны быть порядковыми], могут быть порядковыми номерами Unicode, произвольными строками Unicode,

6
ответ дан 24 November 2019 в 06:07
поделиться

Я не вижу этого в ответах. Мое приложение сортируется по языку с использованием стандартной библиотеки python. Это довольно просто.

# 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)

Вопрос к Леннарту и другим респондентам: никто не знает «локаль» или это не подходит для этой задачи?

52
ответ дан 24 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: