Python中的自定义排序复杂字符串

时间:2014-01-14 17:12:33

标签: python regex string sorting tokenize

我有一个符合模式的文件名列表:s[num][alpha1][alpha2].ext

我需要先按数字排序,然后按alpha1排序,再按alpha2排序。然而,最后两个不是按字母顺序排列的,而是应该反映自定义排序。

我创建了两个代表alpha1和alpha2排序的列表,如下所示:

alpha1Order = ["Fizz", "Buzz", "Ipsum", "Dolor", "Lorem"]
alpha2Order = ["Sit", "Amet", "Test"]

最好的方法是什么?我的第一个虽然是标记化(不知何故)这样我将每个文件名分成它的组成部分(s,num,alpha1,alpha2),然后排序,但我不太确定如何执行这么复杂的排序。使用键功能似乎很笨重,因为这种方式似乎不适合简​​单的排序。

1 个答案:

答案 0 :(得分:3)

一旦标记化,您的数据就可以通过key功能完全订购。只需返回值的alpha1Orderalpha2Order列表的索引即可。用字典替换它们以使查找更容易:

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个值来中断前两个条目上绑定的任何值。