0

私のビューコードが次の場合:

arttags = sorted(arttags, key=operator.attrgetter('date_added'), reverse=True)

結果を 50 個のタグに制限する引数は何ですか?

私はこれを仮定しています:

.... limit=50)

間違っています。

より完全なコードは次のとおりです。

videoarttags = Media.objects.order_by('date_added'),filter(topic__exact='art') 
audioarttags = Audio.objects.order_by('date_added'),filter(topic__exact='art') 
conarttags = Concert.objects.order_by('date_added'),filter(topic__exact='art') 
arttags = list(chain(videoarttags, audioarttags, conarttags)) 
arttags = sorted(arttags, key=operator.attrgetter('date_added'), reverse=True) 

どのように組み込むか –

itertools.islice(sorted(...),50)
4

5 に答える 5

3

heapq.nlargestはどうですか:
iterable.key で定義されたデータセットから n 個の最大要素を含むリストを返します。提供されている場合、反復可能オブジェクトの各要素から比較キーを抽出するために使用される 1 つの引数の関数を指定します。key=str.lower Equivalent to: sorted(iterable, key=key, reverse=True)[:n]

>>> from heapq import nlargest
>>> data = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
>>> nlargest(3, data)
[9, 8, 7]
于 2009-07-22T01:26:51.553 に答える
2

おそらく、スライスが機能することがわかります。

arttags = sorted(arttags, key=operator.attrgetter('date_added'), reverse=True)[:50]
于 2009-07-21T22:50:21.110 に答える
0

私はかなり間違った木を吠えていました。私が達成しようとしていたことは、実際には、自分にできるとは知らなかったテンプレートフィルター(スライス)を使用した非常に単純なものでした。コードは次のとおりです。

{% for arttag in arttags|slice:":50" %}

はい、私はかなり愚かだと感じます、しかし私はそれを成し遂げてうれしいです:-)

于 2009-07-25T03:48:12.557 に答える
0

あなたが望むものの一般的な考えはtake、私は信じています。itertools のドキュメントから:

def take(n, iterable):
    "Return first n items of the iterable as a list"
    return list(islice(iterable, n))
于 2009-07-21T23:08:20.950 に答える
0

objects.order_by.filter各呼び出しに [:50] を追加することもできます。これを行うと、おそらくそれ以上ではなく、Python で 150 個のアイテムをメモリ内でソートするだけで済みます。

于 2009-07-25T04:25:50.857 に答える