我正在尝试对文件列表进行排序,以便下划线字符被认为比其他 ascii 字符“晚”,如下例所示(这是将外部软件移植到 python3)。我希望排序以与原始排序不产生差异的方式相同的方式考虑文件路径。
要求:尽可能避免使用第 3 方排序模块
文件 = 排序(文件,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
我搜索了类似的排序示例,但找不到任何具有相同问题的具体示例。
谢谢
最佳答案
最简单的方法是替换 "_"
在 key 函数中使用比字母“更晚”的字符(例如 "{"
,“z”之后的第一个 ASCII 字符):
sorted(files, key=lambda d: d["name"].lower().replace("_", "{"))
如果 "_"
之间的排序冲突和 "{"
是 Not Acceptable ,解决方案是编写一个自定义比较器函数来强制执行所需的顺序,并自己编写排序算法,因为 python3 不再支持提供自己的 cmp
函数到 list.sort
或 sorted
.
关于用下划线排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18874822/