2009-07-15 4 views
3
私の見解では

、 を私はitertoolsモジュールをインポートする場合:itertools chain()の結果をフィルタリングするにはどうすればよいですか?

from itertools import chain 

と私はそれにいくつかのオブジェクトをチェーン:

franktags = Frank.objects.order_by('date_added').reverse().filter(topic__exact='art') 
amytags = Amy.objects.order_by('date_added').reverse().filter(topic__exact='art') 
timtags = Tim.objects.order_by('date_added').reverse().filter(topic__exact='art') 
erictags = Eric.objects.order_by('date_added').reverse().filter(topic__exact='art') 

ourtags = list(chain(franktags, amytags, timtags, erictags)) 

方法は、i "のDATE_ADDED" によって、その後の順序 "ourtags" か?

surpisingly、

ourtags = list(chain(franktags, amytags, timtags, erictags)).order_by('date_added') 

はエラー " 'リスト' オブジェクトが属性 'ORDER_BY' を持っていない" を返しません。

答えて

12
import operator 

ourtags = sorted(ourtags, key=operator.attrgetter('date_added')) 
+0

答えは簡単だと思いました。私は正しかったことに感謝します。あなたの助けをありがとう。 –

+0

attrgetterをラムダ関数と違って使用していますか? –

5

コードのこの時点までに、すべてのオブジェクトをすでにメモリおよびリストにロードしています。古いPythonリストのようにリストをソートするだけです。あなたの答えのFB用

>>> import operator 
>>> ourtags.sort(key=operator.attrgetter('date_added')) 
+0

感謝万人を。非常に役立ちます! –

関連する問題