10

いくつかの値の順序を示す定義済みのリストがあります。

['id','name','age','height','weight',]

(非常に長くなる可能性があります)

このリストのサブセットを並べ替えたい:

だから私が得たら['height','id']それはなる['id','height']

または['name','weight','height']--->['name','height','weight']

sort何らかの方法でパラメーターを使用して関数でそれを行う方法はありkeyますか? または、カスタムメソッドを使用する必要がありますか?もしそうなら、何が最も効率的でしょうか?

4

2 に答える 2

18

最も効率的な方法は、単語から順序へのマップを作成することです。

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()最初の出現をソート値として使用しますが、ディクショナリ メソッドは代わりに最後の値を使用します。これを回避する方法があります。たとえば、辞書メソッドでリストとインデックスを逆に処理することができます。

于 2013-08-02T12:27:39.307 に答える