python natsort 递归排序字符串

python natsort sort strings recursively

我发现 natsort.natsorted 排序顺序在字符串中途发生变化:

In [31]: import natsort as ns
In [32]: ns.natsorted(["01-08", "02-07", "01-06", "02-09"])
Out[32]: ['01-08', '01-06', '02-09', '02-07']

在这种情况下,我想要的行为是:

In [33]: sorted(["01-08", "02-07", "01-06", "02-09"])
Out[33]: ['01-06', '01-08', '02-07', '02-09']

试试这个:

ns.natsorted(["01-08", "02-07", "01-06", "02-09"], alg=ns.ns.INT | ns.ns.UNSIGNED)

问题是 natsorted 错误地解释了您的字符串。这会手动设置算法以查找无符号整数。否则,它会搜索有符号整数,而“-”会导致问题(例如,如果您将“-08”解释为 -8,则排序有意义)。

这实际上相当于versorted,只是这个算法的一个快捷方式,但我认为最好明确地写出你在做什么,尤其是versorted可能会改变以更适用于未来的版本。