使用Python对字符串格式的数字进行排序

时间:2010-04-08 02:04:51

标签: python sorting

我有一个列表,其中包含一些字符串中的章节编号。 当我使用键功能对键进行排序时,它会给我错误的结果。

keys = ['1.1', '1.2', '2.1', '10.1'] 
keys.sort() 
print keys

['1.1', '1.2', '10.1', '2.1']

如何使用sort函数获取

['1.1', '1.2', '2.1', '10.1']

如果阵列有这样的东西怎么办?

['1.1.1', '1.2.1', '10.1', '2.1'] -> ['1.1.1','1.2.1','2.1','10.1']

4 个答案:

答案 0 :(得分:10)

keys.sort(key=lambda x: [int(y) for y in x.split('.')])

答案 1 :(得分:4)

from distutils.version import StrictVersion
keys.sort(key=StrictVersion)

由于章节编号是版本号的子集,因此可以满足您的需求。

答案 2 :(得分:2)

这有效:

keys.sort(key=lambda x: map(int, x.split('.')))

答案 3 :(得分:1)

keysort提供自定义sorted参数。

来自http://docs.python.org/library/functions.html#sorted

  

key指定一个参数的函数,该函数用于从每个列表元素中提取比较键:key = str.lower。默认值为None(直接比较元素)。