-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 に答える