自定义订单列表

2024-04-29 11:47:13 发布

您现在位置:Python中文网/ 问答频道 /正文

关于我的第一个问题:Custom sort order of list

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”是动态的,这取决于代码中较高的值。。。你知道吗


Tags: oftestalpha排序顺序customordergreen
2条回答

这与上一个问题中的代码完全相同,在按排序顺序查找索引时使用了一个简单的拆分函数:

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

与上次类似,只需在执行查找之前提取所需的零件:

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]))

相关问题 更多 >