You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定字段计算字典列表中各字典的排名(保留原循环)

按年龄计算字典列表中人物的排名(保留原for循环结构)

完全能保留你给出的for循环结构不变,只需要在循环前先做一次预处理,生成年龄到排名的映射,循环内直接通过映射获取排名即可。

完整实现代码

dicts = [
    {'name': 'John', 'age': 23},
    {'name': 'Sue', 'age': 29},
    {'name': 'Bob', 'age': 29},
    {'name': 'Alice', 'age': 25}
]

# 预处理:提取所有年龄去重后按降序排序
unique_sorted_ages = sorted({p['age'] for p in dicts}, reverse=True)
# 生成年龄到排名的映射,最大年龄对应排名1
age_to_rank = {age: idx + 1 for idx, age in enumerate(unique_sorted_ages)}

# 原for循环结构完全保留,只修改age_rank的赋值逻辑
for person in dicts:
    age_rank = age_to_rank[person['age']]
    print(f"{person['name']} is age-rank {age_rank}")

代码说明

  • 先用集合去重所有年龄,再按降序排序,这样相同年龄的人会获得相同排名(比如示例里的Sue和Bob都是29岁,排名都是1)
  • 用字典生成式把每个年龄对应到它的排名,排序后的第一个年龄(最大)对应排名1,依次往后推
  • 你原来的for循环结构一点没变,只是把age_rank = ...的部分换成了从映射里取值

运行输出

John is age-rank 3
Sue is age-rank 1
Bob is age-rank 1
Alice is age-rank 2

如果不需要相同年龄共享排名(哪怕年龄一样,也按排序后的顺序给不同名次),可以用下面的预处理方式:

# 按年龄降序排序所有人物
sorted_people = sorted(dicts, key=lambda x: -x['age'])
# 生成人物姓名到排名的映射(假设姓名唯一)
name_to_rank = {p['name']: idx + 1 for idx, p in enumerate(sorted_people)}

# 循环内这样获取排名
age_rank = name_to_rank[person['name']]

这种方式下,示例里的Sue排1,Bob排2,即使两人年龄相同。

内容的提问来源于stack exchange,提问作者NFeruch - FreePalestine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:45:34