在python中使用多个条件对列表进行排序

时间:2016-01-26 22:37:12

标签: python list sorting lambda

目前我正在尝试对由版本号组成的文件列表进行排序。例如:

0.0.0.0.py
1.0.0.0.py
1.1.0.0.py

它们都存储在列表中。我的想法是将列表的sort方法与lambda表达式结合使用。 lambda表达式应首先删除.py扩展名,然后再按点分割字符串。而不是将每个数字转换为整数并按它们排序。

我知道如何在c#中执行此操作,但我不知道如何使用python执行此操作。一个问题是,如何对多个标准进行排序?如何嵌入lambda表达式呢?

任何人都可以帮助我吗?

非常感谢!

3 个答案:

答案 0 :(得分:5)

您可以使用sorted函数的关键参数:

filenames = [
    '1.0.0.0.py',
    '0.0.0.0.py',
    '1.1.0.0.py'
]

print sorted(filenames, key=lambda f: map(int, f.split('.')[:-1]))

结果:

['0.0.0.0.py', '1.0.0.0.py', '1.1.0.0.py']

lambda将文件名拆分为多个部分,删除最后一部分并将其余部分转换为整数。然后sorted使用此值作为排序标准。

答案 1 :(得分:3)

key函数返回项目列表。在这种情况下,排序是词典。

l = [ '1.0.0.0.py', '0.0.0.0.py', '1.1.0.0.py',]
s = sorted(l, key = lambda x: [int(y) for y in x.replace('.py','').split('.')])
print s

答案 2 :(得分:2)

# read list in from memory and store as variable file_list
sorted(file_list, key = lambda x: map(int, x.split('.')[:-1]))

如果你想知道这里发生了什么:

我们的lambda函数首先获取我们的文件名,将其拆分为由句点分隔的数组。然后我们获取列表中的所有元素,减去最后一个元素,这是我们的文件扩展名。然后我们应用' int'函数到列表的每个元素。然后,返回的列表按照排序的'进行排序。根据列表的元素起作用,从第一个开始,由列表中后面的元素打破关系。