如何显示枚举中是否有重复项

How to show if there are duplicates in enumerate

我有一份 NFL 每支球队的统计数据列表。每周我都有一个函数遍历整个联盟并使用枚举,对每个统计类别中的球队进行排名,然后保存到数据库中。

我的问题是...如果多个团队具有相同的值,我如何给他们相同的排名?

例如,如果爱国者队和巨人队每场平均得分 30 分,并且是联盟中最好的,我如何让他们都排名第一,而下一支球队从第三名开始?

下面是我目前对球队的排名 感谢您提供的任何帮助或提示。

    for team in TeamName.objects.filter(league__name='NFL'):

        for count, value in enumerate(NFLTeamStats.objects.all().values(
                                          'name', 'avg_points').order_by(
                                              '-avg_points'), start=1):
                if value['name'] == team.pk:
                    avg_points_rank = count

您可以使用 Window function and Rank 为每一行添加注释,并按照您描述的方式递增

from django.db.models import F, Window
from django.db.models.functions import Rank

for stats in NFLTeamStats.objects.annotate(
    rank=Window(expression=Rank(), order_by=F('avg_points').desc())
):
    print(stats, stats.rank)

很遗憾,在这种情况下我看不到任何调整枚举的方法。您必须存储自己的计数器并与每次迭代的最后一次进行比较:

rank = 0
last_points = -1
for value in NFLTeamStats.objects.all().values('name', 'avg_points').order_by('-avg_points')
        if value['name'] == team.pk:
            if value['avg_points'] > last_points:
                rank += 1
            avg_points_rank = rank
            last_points = value['avg_points']