1. ホーム
  2. python

[解決済み] Pythonでunicode文字列をアルファベット順に並べるには?

2022-12-28 11:52:52

質問

Python はデフォルトでバイト値でソートします。つまり、é が z の後に来たり、他の同様におかしなことになります。Pythonでアルファベット順にソートするのに最適な方法は何でしょうか?

このためのライブラリはありますか?私は何も見つけられませんでした。できれば、スウェーデン語では åäö は z の後にソートされるべきだが、ü は u でソートされるべきだ、などということを理解できるように、ソートは言語サポートされているべきです。Unicodeのサポートは、それによってかなり多くの要件となります。

そのためのライブラリがない場合、これを行うための最良の方法は何でしょうか?文字から整数値へのマッピングを作成し、それを使用して文字列を整数リストにマッピングするだけですか?

どのように解決するのですか?

IBMの ICU ライブラリはそれを実現します (そしてもっとたくさん)。Pythonへのバインディングもあります。 PyICU .

更新 : ICUとの仕分けにおける核心的な違いは locale.strcoll は、ICU が完全な Unicode 照合順序アルゴリズム 一方 strcoll ISO 14651 .

この2つのアルゴリズムの違いを簡単にまとめると、以下のようになります。 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']