2017-04-15 53 views
-3

我是初学者编程。 我正在努力使代码返回游戏结果顺序取决于胜利和游戏的数量。例如,如何对双字典进行排序? (Python3)

teams = { 
'Arsenal FC': { 
    'name': 'Arsenal FC', 
    'wins': 4, 
    'games_played': 15, 
}, 
'Chelsea FC': { 
    'name': 'Chelsea FC', 
    'wins': 6, 
    'games_played': 16, 
}, 
'Madrid Real': { 
    'name': 'Madrid Real', 
    'wins': 4, 
    'games_played': 11, 
} 
} 

这种情况下,我想回到上面这样的名单:

[ 
{ 
'Chelsea FC': { 
    'name': 'Chelsea FC', 
    'wins': 6, 
    'games_played': 16, 
}, 
'Madrid Real': { 
    'name': 'Madrid Real', 
    'wins': 4, 
    'games_played': 11, 
}, 
'Arsenal FC': { 
    'name': 'Arsenal FC', 
    'wins': 4, 
    'games_played': 15, 
} 
] 

球队赢得了最多的应该是顶部。如果胜利次数与另一支球队相等,则球队应该出现的比赛数量会减少。 对不起我的英语不好。如果你不明白我的目标,请询问。 如果你能解释细节,将不胜感激!

回答

4

您可以通过一个 “排序键” sorted()

>>> sorted(teams.items(), key=lambda x:(-x[1]["wins"], x[1]["games_played"])) 
[('Chelsea FC', {'games_played': 16, 'name': 'Chelsea FC', 'wins': 6}), 
('Madrid Real', {'games_played': 11, 'name': 'Madrid Real', 'wins': 4}), 
('Arsenal FC', {'games_played': 15, 'name': 'Arsenal FC', 'wins': 4})] 

得到确切的字典结构在你的榜样,你可以做

>>> [{k:v} for k,v in sorted(teams.items(), key=lambda x:(-x[1]["wins"], x[1]["games_played"]))] 
[{'Chelsea FC': {'games_played': 16, 'name': 'Chelsea FC', 'wins': 6}}, 
{'Madrid Real': {'games_played': 11, 'name': 'Madrid Real', 'wins': 4}}, 
{'Arsenal FC': {'games_played': 15, 'name': 'Arsenal FC', 'wins': 4}}] 

说明:

x[1]是您正在迭代的每个字典项目的值。通过添加一个-,我们可以从最大到最小排序,如果您想按多个条件排序,只需使用排序值的元组。

+0

谢谢你的解释! – user7421972

相关问题