如何排序双字典? (Python3)

时间:2017-04-15 08:44:35

标签: python python-3.x sorting

我是初学者编程。 我正在努力制作代码,根据胜利和游戏的数量返回游戏结果顺序。例如,

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,
 }
]

球队获胜最多应该是顶级。如果胜利的数量等于另一支球队,那么球队应该会有更少的比赛。 对不起,我的英语能力差。如果您无法理解我的目标,请询问。 如果你能解释一下细节,我们将不胜感激!

1 个答案:

答案 0 :(得分: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]是您要迭代的每个字典项的值。通过添加-,我们可以从最大到最小排序,如果您想按多个标准排序,只需使用排序值元组。