如何根据字典字段值对字典列表排序并生成对应奖牌标识?
实现代码
# 原始数据 a = [{"name":"XXX", "punch":20},{"name":"yyy", "punch":19},{"name":"zzz", "punch":5}] # 按punch升序排序,punch越小排名越靠前 sorted_by_punch = sorted(a, key=lambda x: x["punch"]) # 排名对应奖牌顺序:第1名Gold、第2名Silver、第3名Bronze medal_map = ["Gold", "Silver", "Bronze"] # 生成结果 result = [] for idx, item in enumerate(sorted_by_punch): result.append({ "name": item["name"].lower(), "medal": medal_map[idx] }) # 若需要和你给出的预期结果顺序完全一致(按奖牌从铜到金排序),可额外添加以下排序逻辑 result = sorted(result, key=lambda x: medal_map.index(x["medal"]), reverse=True) print(result)
逻辑说明
- 首先对原始列表按
punch字段升序排列,保证数值越小的元素排在越前面,对应排名越高 - 按排名顺序定义奖牌列表,排序后第0位(第1名)取Gold,第1位(第2名)取Silver,第2位(第3名)取Bronze
- 遍历排序后的列表生成结果,同时将
name字段统一转为小写,匹配预期输出格式 - 额外排序步骤可选,用于调整结果列表顺序和你给出的示例完全对齐
输出结果
[{'name': 'xxx', 'medal': 'Bronze'}, {'name': 'yyy', 'medal': 'Silver'}, {'name': 'zzz', 'medal': 'Gold'}]
内容的提问来源于stack exchange,提问作者mohanasundaram alagappan
相关产品推荐
相关产品推荐

