2012-02-01 6 views
14

データベースの行オブジェクトのリストをメモリにロードし、その行の1つを固有のIDで取得する必要があります。属性値によってリストから1つのオブジェクトを見つけるきれいな方法はありますか?またはループと比較をするだけですか?リストアイテムをPythonで取得する

+2

を:

あなたはこのような何かを行う場合は、例外をキャッチ代わりNoneを取得する必要がないのですか? – Avaris

+0

これはちょうど例 – Yarin

答えて

11

はい、あなたのループと比較:

items = [item for item in container if item.attribute == value] 

そして、あなたが戻ってあなたが見つけどのように多くを見るために試験することができ、リストを取得します。

あなたはこれに多くの処理を実行する場合、キーはあなたが興味を持っている属性である辞書を、使用することを検討してください。

4

あなたはできfilter

matches = filter(lambda obj: obj.attribute == "target value", myListOfObjects) 

効率上のアドバイスをKindall氏の回答を参照してください。これをたくさんしているのなら、それは正しい方法ではありません。

+0

これを効率的に行う正しい方法は何ですか?ありがとう。 – moeseth

12

あなたがこれを行う場合、それは非常に最初のマッチを与え、代わりに比較します全リスト:find first sequence item that matches a criterion。データベースクエリと直接これをやっていない理由はあり

item = next((i for i in items if i == 'value'), None) 
関連する問題