以数字方式对逗号分隔的数字串进行排序

时间:2017-02-26 17:46:38

标签: python sorting

希望按列排序一组.csv数值。可选地,列数可以变化。例如,使用Python:

        print(sorted(['9,11', '70,10', '10,8,1','10,70']))

产生

        ['10,70', '10,8,1', '70,10', '9,11']

,而期望的结果是

        ['9,11', '10,8,1', '10,70', '70,10']

首先,按第一列排序,然后按第二列排序等。

显然这可以做到,但这可以优雅地完成吗?

2 个答案:

答案 0 :(得分:3)

使用key的{​​{1}}参数可以更优雅地完成:

sorted

结果:

data = [
    '9,11',
    '70,10',
    '10,8,1',
    '10,70'
]

print sorted(data, key=lambda s: map(int, s.split(',')))

使用上面的代码,我们将列表中的每个字符串转换为整数值列表,并使用此整数值列表作为我们的排序键

答案 1 :(得分:1)

如果您不介意第三方模块,可以使用natsort,它提供的功能natsorted旨在替代sorted

>>>> import natsort
>>> natsort.natsorted(['9,11', '70,10', '10,8,1','10,70'])
['9,11', '10,8,1', '10,70', '70,10']

完全披露,我是该软件包的作者。