如何按值和键的多个条件对嵌套字典进行排序?

Posted

技术标签:

【中文标题】如何按值和键的多个条件对嵌套字典进行排序?【英文标题】:How can I sort a nested dict by multiple criteria for values and keys? 【发布时间】:2022-01-21 08:44:23 【问题描述】:

我在 Python 中有一个嵌套的字典,我想对其进行排序。

在第一步中,我希望它按“点”排序。 如果所有“点”都相等,请使用“wins”。 如果“积分”和“胜利”相等,则应按照“巴西”、“摩洛哥”等球队名称进行排序。

我的字典是

list_of_team = 
    "Brazil": "wins": 1, "loses": 1, "draws": 1, "goal difference": 0, "points": 4,
    "Spain": "wins": 1, "loses": 1, "draws": 1, "goal difference": 0, "points": 4,
    "Portugal": "wins": 1, "loses": 1, "draws": 1, "goal difference": 0, "points": 4,
    "Morocco": "wins": 1, "loses": 1, "draws": 1, "goal difference": 0, "points": 4

输出应如下所示:

Brazil  wins:1 , loses:1 , draws:1 , goal difference:0 , points:4

Morocco  wins:1 , loses:1 , draws:1 , goal difference:0 , points:4 

Portugal  wins:1 , loses:1 , draws:1 , goal difference:0 , points:4

Spain  wins:1 , loses:1 , draws:1 , goal difference:0 , points:4

【问题讨论】:

您能否请edit 提供一个更现实的示例,其中点数和获胜的某些值不相等,以便清楚地知道应该如何对输出进行排序。 【参考方案1】:

sorted(list_of_team, key= lambda x : list_of_team[x].get("points"))

【讨论】:

它没有回答问题的其余部分,即如果积分相等则按胜利排序,如果积分和胜利都相等则按团队名称排序。【参考方案2】:

如果您想按“积分”和“获胜”按降序排序,按球队名称按字典顺序排序:

out = sorted(list_of_team, key= lambda x : (-list_of_team[x].get("points"), -list_of_team[x].get("wins"), x))

【讨论】:

以上是关于如何按值和键的多个条件对嵌套字典进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中按值对字典进行排序

在Python中按值对嵌套字典进行排序,并按另一个值对余数进行排序

如何按值的 DateTime 属性对字典进行排序

python字典值和键[重复]

当每个字典都有不同的键时,如何按值对字典列表进行排序?

如何按值对多维数组进行排序