【问题标题】:Sorting Items by Multiple Criteria [closed]按多个标准对项目进行排序[关闭]
【发布时间】:2013-11-08 06:35:55
【问题描述】:

我正在编写一个程序,该程序获取已播放的足球比赛列表,并从中输出联赛中的排名。我完成了大部分的解析工作,但我正在努力解决这个问题。

排序标准如下: A) 得分最多的球队。 B) 比赛次数最少的球队。 C) 获胜次数最多的球队。 D) 净胜球最高的球队。 E) 进球最多的球队。 F) 按字母顺序。

我的代码给了我一个根据所有游戏输入创建的字典,格式如下:

{'Cagliari': [3, 1, 0, 0, 2, 1, 1, 1], 'Torino': [0, 0, 0, 1, 1, 2, -1, 1], 
'Lazio': [3, 1, 0, 0, 4, 2, 2, 1], 'AC Milan': [1, 0, 1, 0, 1, 1, 0, 1], 
'Napoli': [0, 0, 0, 1, 2, 4, -2, 1], 'Inter Milan': [1, 0, 1, 0, 1, 1, 0, 1]}

其中每个键:值对处于特定模式:

'Team' : [points, wins, ties, losses, goals for, goals against, goal differential, 
games played]

我的问题是,如何根据这些多重标准进行排序?

【问题讨论】:

标签: python sorting python-3.x dictionary


【解决方案1】:
>>> teams = {'Cagliari': [3, 1, 0, 0, 2, 1, 1, 1], 'Torino': [0, 0, 0, 1, 1, 2, -1, 1], 
... 'Lazio': [3, 1, 0, 0, 4, 2, 2, 1], 'AC Milan': [1, 0, 1, 0, 1, 1, 0, 1], 
... 'Napoli': [0, 0, 0, 1, 2, 4, -2, 1], 'Inter Milan': [1, 0, 1, 0, 1, 1, 0, 1]}
>>> sorted(teams, key=lambda t : (teams[t][0], teams[t][-1]*-1, teams[t][1], teams[t][-2], teams[t][4], t))
['Napoli', 'Torino', 'AC Milan', 'Inter Milan', 'Cagliari', 'Lazio']

【讨论】:

  • 按字母顺序的决胜局似乎不起作用,但如果我能找到一种方法来理解这种类型的排序,我相信我可以解决它。
  • @idalsin:lambda 表达式中的元组,将所有条件放入其中。更重要的标准位于次要标准的左侧。此外,如果您想按某些标准按降序排序,请将其乘以 -1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 2011-04-11
相关资源
最近更新 更多