Python中如何按积分、胜场、队名多条件排序字典列表?
Python实现字典列表的多条件排序(世界杯小组赛场景)
要实现多条件排序,核心是给sorted()函数的key参数返回一个排序优先级元组,元组内元素的顺序就是排序的优先级(从高到低)。结合你的需求,具体实现如下:
1. 修正原始数据的语法错误
你提供的示例代码存在字符串引号未闭合的问题,先修正为合法的Python代码:
teams = [ {'name': 'first_team', 'wins': 3, 'loses': 0, 'points': 9}, {'name': 'second_team', 'wins': 2, 'loses': 1, 'points': 6}, {'name': 'third_team', 'wins': 1, 'loses': 2, 'points': 3}, {'name': 'fourth_team', 'wins': 0, 'loses': 3, 'points': 0} ]
2. 多条件排序实现
按照「积分降序 → 胜场降序 → 队名字典序升序」的规则排序,代码如下:
sorted_teams = sorted(teams, key=lambda d: (-d['points'], -d['wins'], d['name']))
逻辑说明
- 积分/胜场降序:
sorted()默认是升序排列,对数值取负后,大的数值会排在前面(比如9的负是-9,比6的负-6小,升序时-9在前,对应原始积分9在前) - 队名字典序升序:直接使用
d['name'],默认按字符串的字典序(A-Z)排列,确保胜场和积分相同时,队名靠前的排前面
验证示例
如果添加一支积分、胜场与second_team相同的球队:
teams.append({'name': 'alpha_team', 'wins': 2, 'loses': 1, 'points': 6})
执行排序后,alpha_team会排在second_team之前,符合队名字典序的规则。
内容的提问来源于stack exchange,提问作者Sepas
相关产品推荐
相关产品推荐

