Come faccio a filtrare una catena itertools () risultato?
-
13-09-2019 - |
Domanda
nel mio punto di vista, se ho importare un modulo itertools:
from itertools import chain
e mi incateno alcuni oggetti con esso:
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))
Come faccio allora ordine "ourtags" da parte del "DATE_ADDED"?
Non sorprendentemente,
ourtags = list(chain(franktags, amytags, timtags, erictags)).order_by('date_added')
restituisce un "oggetto 'list' non ha alcun attributo 'order_by'" errore.
Soluzione
import operator
ourtags = sorted(ourtags, key=operator.attrgetter('date_added'))
Altri suggerimenti
A questo punto del codice, hai già caricato su tutti gli oggetti in memoria e in un elenco. Basta ordinare l'elenco come si farebbe con qualsiasi vecchia lista Python.
>>> import operator
>>> ourtags.sort(key=operator.attrgetter('date_added'))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow