我有一个文本文件,其中包含以下内容:
02.03.04@@
02.04.01@@
02.04.03.02@@
02.06.04.01@@
02.06.04.02@@
02.06.09@@
02.13.01@@
02.13.02@@
1.01@@
1.02@@
1.03@@
1.04@@
1.05@@
1.06@@
1.07@@
1.08@@
1.09@@
1.1@@
2.24@@
4.12@@
我需要对它进行排序。当你看到以1,2开头的数字已经使用sorted()进行排序。但是像'02 .04.03.02 @@'这样的数字是单独排序的但是逻辑上它应该在1.之后。在Python中这样做?我会分开'。'然后单独比较?
答案 0 :(得分:4)
拆分并映射到键中的整数:
sorted(inputlist, key=lambda v: [int(i) for i in v.rstrip('@').split('.')])
这会为每一行生成一个整数列表,然后按字典顺序对它们进行排序;例如在第一个不同的元素上。
演示:
>>> sample = '''\
... 02.03.04@@
... 02.04.01@@
... 02.04.03.02@@
... 02.06.04.01@@
... 02.06.04.02@@
... 02.06.09@@
... 02.13.01@@
... 02.13.02@@
... 1.01@@
... 1.02@@
... 1.03@@
... 1.04@@
... 1.05@@
... 1.06@@
... 1.07@@
... 1.08@@
... 1.09@@
... 1.1@@
... 2.24@@
... 4.12@@
... '''.splitlines()
>>> from pprint import pprint
>>> sorted(sample, key=lambda v: [int(i) for i in v.rstrip('@').split('.')])
['1.01@@', '1.1@@', '1.02@@', '1.03@@', '1.04@@', '1.05@@', '1.06@@', '1.07@@', '1.08@@', '1.09@@', '02.03.04@@', '02.04.01@@', '02.04.03.02@@', '02.06.04.01@@', '02.06.04.02@@', '02.06.09@@', '02.13.01@@', '02.13.02@@', '2.24@@', '4.12@@']
>>> pprint(_)
['1.01@@',
'1.1@@',
'1.02@@',
'1.03@@',
'1.04@@',
'1.05@@',
'1.06@@',
'1.07@@',
'1.08@@',
'1.09@@',
'02.03.04@@',
'02.04.01@@',
'02.04.03.02@@',
'02.06.04.01@@',
'02.06.04.02@@',
'02.06.09@@',
'02.13.01@@',
'02.13.02@@',
'2.24@@',
'4.12@@']