目前我正在尝试对由版本号组成的文件列表进行排序。例如:
0.0.0.0.py
1.0.0.0.py
1.1.0.0.py
它们都存储在列表中。我的想法是将列表的sort
方法与lambda表达式结合使用。 lambda表达式应首先删除.py
扩展名,然后再按点分割字符串。而不是将每个数字转换为整数并按它们排序。
我知道如何在c#中执行此操作,但我不知道如何使用python执行此操作。一个问题是,如何对多个标准进行排序?如何嵌入lambda表达式呢?
任何人都可以帮助我吗?
非常感谢!
答案 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'函数到列表的每个元素。然后,返回的列表按照排序的'进行排序。根据列表的元素起作用,从第一个开始,由列表中后面的元素打破关系。