我有一个符合模式的文件名列表:s[num][alpha1][alpha2].ext
我需要先按数字排序,然后按alpha1排序,再按alpha2排序。然而,最后两个不是按字母顺序排列的,而是应该反映自定义排序。
我创建了两个代表alpha1和alpha2排序的列表,如下所示:
alpha1Order = ["Fizz", "Buzz", "Ipsum", "Dolor", "Lorem"]
alpha2Order = ["Sit", "Amet", "Test"]
最好的方法是什么?我的第一个虽然是标记化(不知何故)这样我将每个文件名分成它的组成部分(s,num,alpha1,alpha2),然后排序,但我不太确定如何执行这么复杂的排序。使用键功能似乎很笨重,因为这种方式似乎不适合简单的排序。
答案 0 :(得分:3)
一旦标记化,您的数据就可以通过key
功能完全订购。只需返回值的alpha1Order
和alpha2Order
列表的索引即可。用字典替换它们以使查找更容易:
alpha1Order = {token: i for i, token in enumerate(alpha1Order)}
alpha2Order = {token: i for i, token in enumerate(alpha2Order)}
def keyfunction(filename):
num, alpha1, alpha2 = tokenize(filename)
return int(num), alpha1Order[alpha1], alpha2Order[alpha2]
返回一个要排序的元组; Python将使用第一个值进行排序,对第二个条目具有相同int(num)
值的任何内容进行排序,使用第3个值来中断前两个条目上绑定的任何值。