Sorting 用下划线排序

Sorting 用下划线排序,sorting,python-3.x,Sorting,Python 3.x,我正在尝试对文件列表进行排序,以便下划线字符被认为比下面示例中的其他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

我正在尝试对文件列表进行排序,以便下划线字符被认为比下面示例中的其他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
我搜索过类似的排序示例,但找不到任何与同一问题相关的具体示例


谢谢

做起来并不难。。。下次请先自己尝试一下。最简单的方法是将键函数中的
“”
替换为比字母(例如
“}”
)更晚排序的字符:

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

我试图找到任何关于如何比较字符串(使用linux排序实用程序对旧数据进行排序)的文档(甚至认为可能涉及到语言环境)。感谢我没有想到的提示,但我想知道是否有办法更改默认的cmp函数—另一个与我从linux排序实用程序获得的功能相同的函数。根据
man sort
,顺序由机器上设置的区域设置决定,使用
LC_ALL=C
生成ASCII顺序(这是python字符串的默认值);您的区域设置可能与此不同,并导致这种非标准排序。在python2中,您可以指定
cmp
函数,而不是带有
sorted
key
函数,但不建议这样做,因为这样会比
key
慢。在python3中,除非修补C unicode实现或定义自己的符合顺序的unicode子类,否则无法真正更改字符串的内置比较。