用下划线排序

标签 sorting python-3.x

我正在尝试对文件列表进行排序,以便下划线字符被认为比其他 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.sortsorted .

关于用下划线排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18874822/

相关文章:

python - 如何按列中列表的元素索引数据?

python - 加载特定用户的登录逻辑

java - 对 String[][] 意外输出进行排序

python - 这个排序算法有名字吗? (选择和合并之间的交叉)

python - “dict_keys”对象不支持索引

python - 快速确定 Python 中小于 10 亿的数字是否为质数

Python 脚本在一段时间后关闭

php - 如何在php中按文件大小对 ListView 进行排序

MongoDB 聚合以及使用关联集合字段进行查找和排序会减慢查询速度

linux - 按其他文件中列出的顺序对文本文件进行排序