gpt4 book ai didi

python - Django 按最新评分列出所有作者

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:11 32 4
gpt4 key购买 nike

鉴于 Django 文档中的以下简化模型,我想返回所有作者的列表,这些作者按他们最近条目或过去某个日期之前的最新条目的评分分组。

 class Author(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()

class Entry(models.Model):
headline = models.CharField(max_length=255)
pub_date = models.DateTimeField()
mod_date = models.DateTimeField()
authors = models.ForeignKey(Author)
rating = models.IntegerField()

最后我想把它变成一个 python 字典,比如:{1star:(author1,author2),2star:(author3,author4,author5)...}。

一个想法是返回所有条目,然后使用 itertools.groupby 来操作大型数据集。谁能推荐更清洁的替代品?

最佳答案

另一种方法

from collections import defaultdict
from datetime import datetime, timedelta

week_ago = datetime.now() - timedelta(days=7)

author_recent_ratings = dict(Entry.objects.filter(pub_date__gt=week_ago)
.order_by('pub_date')
.select_related()
.values_list('author', 'rating'))

recent_by_rating = defaultdict(list)
for author, rating in author_recent_ratings.iteritems():
recent_by_rating[rating].append(author)

这是您可以做到的一种方式。基本上,您按最近的条目(在本例中为上周的条目)排序,然后按最早的顺序排序,然后将值列表返回的列表转换为字典。发生的情况是,当它被转换成字典时,较新的条目会破坏旧的条目,因此您最终会得到一个以作者为键、以他们的评分为值的字典。

关于python - Django 按最新评分列出所有作者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6976792/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com