Python按积分、胜场、队名字典序排序球队列表结果不符问题
问题原因
你实际运行代码时应该为了实现积分、胜场从高到低排序,给sorted添加了reverse=True参数(你贴出的代码片段省略了该参数)。reverse=True会对key元组的所有字段统一应用降序规则,导致原本需要升序排列的队名字段也被反转,所以首字母更靠后的Portugal反而排在了Iran前面,和预期不符。
修正方案
调整key的构造逻辑,对需要降序的数值字段取负值,直接使用sorted默认的升序规则即可,无需加reverse=True参数。这种混合排序方向的场景lambda写法更灵活,修正后代码如下:
a = sorted(a, key=lambda x: (-x[-1], -x[1], x[0]))
运行后即可得到预期输出:
[['Spain', 1, 0, 2, 2, 5], ['Iran', 1, 1, 1, 0, 4], ['Portugal', 1, 1, 1, 0, 4], ['Morocco', 1, 2, 0, -2, 3]]
如果需要用itemgetter实现,需要额外处理排序方向,不如lambda写法简洁,更推荐上述lambda方案。
内容的提问来源于stack exchange,提问作者M.Arya
相关产品推荐
相关产品推荐

