2017-06-26 17 views
0
class A: 
    def __init__(): 
     self.a = 0 
     self.b = 0 
     self.c = 0 

l = [object1 of A, object2 of A, object3 of A] 

l = sorted(l, key=somefunc) 

このリストには、インスタンスごとにa、b、cの値が含まれています。属性aを使用するカスタム関数を使用してソートしますが、属性cの値のみを含む新しいリストを返すようにします(ソートされた順番で)。属性 'a'のオブジェクトリストをソートし、 'c'属性のリストを生成します。

+0

インスタンスの 'list'を取るsorted'、独自のカスタムを'、作成されていないのはなぜそれぞれの関連する属性のみを返します。 –

+1

@SamChats:それはむしろ少し残酷すぎる。 'ソート済み(o.cでo.c) 'は、新しい関数を作成せずにこれを行うことができます。 –

+0

@MartijnPieters :)はい、それは提供された答えが行くより良い方法だと思います... –

答えて

0

最初に値を抽出してから並べ替えます。

objects_to_sort = [x.c for x in l] 
objects_to_sort.sort() 

リストには属性のみが含まれているため、キー機能は必要ありません。

+0

'sorted()'とジェネレータ式を使わないのはなぜですか? –

0

あなたは、あなたの好みの属性を抽出し、最初の並べ替え、2つのステップを取る必要があります:

[o.c for o in sorted(l, key=somefunc)]