python natsort递归排序字符串

时间:2015-04-09 20:51:56

标签: python sorting natsort

我发现使用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']

1 个答案:

答案 0 :(得分:1)

试试这个:

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

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

这实际上相当于versorted,这只是此算法的一个快捷方式,但我认为明确写出你正在做的事情会更好,特别是因为versorted可能会更改为更适用于版本在将来。