[解決済み] 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']
関連
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] Flaskで非同期タスクを作る
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] 大文字と小文字を区別しないリストソート?
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] 異なる順序で同じ要素を持つ2つのJSONオブジェクトを等しく比較するには?
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)