假设我在Google App Engine的数据存储区中有以下模型:
posts = Post.query().order(-Post.votes)
for post, index in enumerate(posts):
if post.name == "John":
print(index)
我想首先查询Post以获得按投票数量排序的所有帖子(从最高到最低),然后找到帖子的排名/地点,名称为" John"。 因此,如果约翰的帖子获得第二多的选票,那么他将获得第二名。
有一种简单的方法吗? 现在我正在做类似的事情:
rank
我认为这不是一个非常好/有效的方法。
答案 0 :(得分:0)
如果帖子的总数非常高而名为John的帖子数量很少,那么可能会更有效地执行以下操作:
total_posts = len(Post.query().fetch(keys_only=True))
john_posts = Post.query(Post.name == 'John')
for post in john_posts:
# find out how many posts have higher votes than this post
rank = len(Post.query(Post.votes > post.votes).fetch(keys_only=True))
print('%d out of %d' % (rank, total_posts))
它也会更便宜,因为你只能从数据库中读取John命名的帖子(付费的DB操作) - keys_only查询是免费的。
虽然它不是总列表中的实际索引 - 但是对于具有相同票数的帖子,您的排名会相同。