10
order = ['w','x','a','z']
[(object,'a'),(object,'x'),(object,'z'),(object,'a'),(object,'w')]

「order」によって提供されるキーリストに従って、上記のタプルのリストを2番目の要素でソートするにはどうすればよいですか?

2013 年 11 月 18 日の更新:

キーが一意であることが確実なこの質問のバリエーションに対するはるかに優れたアプローチを見つけました。詳細は、この質問: Python: using a dict to speed sorting of a list of tuplesです。

タプルの与えられたリストには のキー値を持つ2つのタプルがあるため、上記の質問はまったく当てはまりません'a'

4

1 に答える 1

13

リスト内の各タプルの 2 番目の値のインデックスを返す関数sortedとして、 および を使用できます。keyorder

>>> sorted(mylist,key=lambda x: order.index(x[1]))

[('object', 'w'), ('object', 'x'), ('object', 'a'), ('object', 'a'), ('object', 'z')]

タプルの値がリスト内に存在しない場合は常に失敗することに注意してくださいorder

編集:

もう少し安全にするために、次を使用できます。

sorted(mylist,key=lambda x: x[1] in order and order.index(x[1]) or len(order)+1)

これにより、リストにないキーを持つすべてのエントリがorder、結果リストの最後に配置されます。

于 2012-11-16T01:08:41.443 に答える