最も効率的な方法は、単語から順序へのマップを作成することです。
ordering = {word: i for i, word in enumerate(predefined_list)}
次に、そのマッピングを並べ替えに使用します。
somelist.sort(key=ordering.get)
別の方法は、リストで使用.index()
してリストをスキャンし、並べ替え中に各単語のインデックスを見つけることです。
somelist.sort(key=predefined_list.index)
しかし、これは辞書を使用するほど効率的ではありません。ordering
デモ:
>>> predefined_list = ['id','name','age','height','weight',]
>>> ordering = {word: i for i, word in enumerate(predefined_list)}
>>> sorted(['height','id'], key=ordering.get)
['id', 'height']
>>> sorted(['name','weight','height'], key=ordering.get)
['name', 'height', 'weight']
2 つの方法では、事前定義されたリストのいずれかの値が一意でない場合、異なる並べ替え順序になります。メソッドは値の.index()
最初の出現をソート値として使用しますが、ディクショナリ メソッドは代わりに最後の値を使用します。これを回避する方法があります。たとえば、辞書メソッドでリストとインデックスを逆に処理することができます。