5

以下の例に示すように、アンダースコア文字が他のASCII文字よりも「遅い」と見なされるように、ファイルのリストをソートしようとしています(これは、外部ソフトウェアをpython3に移植しています)。元の並べ替えで差分を生成しないのと同じように、並べ替えでファイルパスを考慮したいと思います。

要件: 可能であれば、サードパーティの並べ替えモジュールを避ける

files = sorted( files, key=lambda d: d['name'].lower() )

私が避けようとしている再注文の例

-/usr/wte/wte_scripts/wfaping.sh
 /usr/wte/wte_scripts/wfa_test_cli.sh
+/usr/wte/wte_scripts/wfaping.sh

同様の並べ替えの例を検索しましたが、同じ問題で具体的なものは見つかりませんでした。

ありがとう

4

1 に答える 1

2

最も簡単な方法は、キー関数内の"_"文字よりも「後で考慮される」文字 (たとえば、「z」の後の最初の ASCII 文字) に置き換えることです。"{"

sorted(files, key=lambda d: d["name"].lower().replace("_", "{"))

"_"との間の並べ替えの競合が受け入れられない場合、解決策は、目的の順序を強制するカスタム コンパレータ関数"{"を作成し、並べ替えアルゴリズムを自分で作成することです。cmplist.sortsorted

于 2013-09-18T14:36:43.347 に答える