如何过滤itertools链(chain())的结果?

4 投票
2 回答
5177 浏览
提问于 2025-04-15 12:54

在我看来,

如果我导入了一个叫做 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))

那么我该怎么按照 "date_added" 来排序 "ourtags" 呢?

这并不奇怪,

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

会返回一个错误,提示 "'list' 对象没有 'order_by' 这个属性"。

2 个回答

5

到这里,你已经把所有的对象都加载到内存里,并放进了一个列表中。接下来,就像处理任何普通的Python列表一样,对这个列表进行排序就可以了。

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

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

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答