如何显示枚举中是否有重复项
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']
我有一份 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']