-5

在这里扩展我的第一个问题:列表的自定义排序顺序

mylist1 = ['moi.alpha', 'moi.red']
mylist2 = ['test.green', 'test.alpha','test.red']

我想按以下顺序对其进行排序:['red','green','blue','alpha']

以便: mylist1 = ['moi.red','moi.alpha']
mylist2 = ['test.red','test.green','test.alpha']

请注意,“moi”和“test”是动态的,具体取决于代码中分配的较高值...

4

2 回答 2

2

这与上一个问题的代码完全相同,在 sort_order 中查找索引时具有简单的拆分功能:

mylist1 = ['test.alpha', 'test.green']
mylist2 = ['asdf.blue', 'asdf.alpha', 'asdf.red']
sort_order = ['red', 'blue', 'green', 'alpha']
mylist2.sort(key=lambda x: sort_order.index(x.split(".")[1]))
mylist1.sort(key=lambda x: sort_order.index(x.split(".")[1]))
print mylist2
print mylist1

输出:

['asdf.red', 'asdf.blue', 'asdf.alpha']
['test.green', 'test.alpha']

您真正需要的是:

def sort_list(lst):
    sort_order = ['red', 'blue', 'green', 'alpha']
    lst.sort(key=lambda x: sort_order.index(x.split(".")[1]))
    return lst
于 2013-08-23T17:47:40.790 回答
1

与上次类似,只需在进行查找之前提取您想要的部分:

your_order = ['red','green','blue','alpha']
order = {v:i for i,v in enumerate(your_order)}
mylist2.sort(key=lambda L: order.get(L.partition('.')[2]))
于 2013-08-23T17:40:43.073 回答