как отфильтровать результат цепочки itertools ()? - PullRequest
3 голосов
/ 15 июля 2009

по моему мнению, если я импортирую модуль itertools:

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))

как мне тогда заказать "ourtags" по "date_added"?

не удивительно,

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

возвращает объект «список», не имеющий атрибута «order_by» ».

Ответы [ 2 ]

13 голосов
/ 15 июля 2009
import operator

ourtags = sorted(ourtags, key=operator.attrgetter('date_added'))
5 голосов
/ 15 июля 2009

К этому моменту в коде вы уже загрузили все объекты в память и в список. Просто отсортируйте список, как любой старый список Python.

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