Dav*_*vid 5 sorting python-3.x
我正在尝试对文件列表进行排序,以便下划线字符被认为比其他 ascii 字符“晚”,如下例所示(这是将外部软件移植到 python3)。我希望排序以与最初相同的方式考虑文件路径,以便与原始排序不产生差异。
要求:如果可能,避免使用第三方排序模块
文件 = 排序( 文件, 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
Run Code Online (Sandbox Code Playgroud)
我搜索了类似的排序示例,但找不到任何具有相同问题的具体内容。
谢谢
最简单的方法是在按键函数中用"_"比字母“晚考虑”的字符(例如,“z”之后的第一个 ASCII 字符)进行替换:"{"
sorted(files, key=lambda d: d["name"].lower().replace("_", "{"))
Run Code Online (Sandbox Code Playgroud)
"_"如果和之间的排序冲突"{"是不可接受的,解决方案是编写一个自定义比较器函数来强加所需的顺序,并自己编写排序算法,因为 python3 不再支持向或提供您自己的cmp函数。list.sortsorted