You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中按嵌套字典的points、wins及键序排序?

嵌套字典多条件排序实现

问题描述

给定如下嵌套字典:

dict_1 ={'Spain':{'wins':1,'loses':0,'draws':2,'goal_difference':2, 'points':3},'Portugal':{'wins':3,'loses':1,'draws':1,'goal_difference':0,'points':4},'Morocco':{'wins':2,'loses':2,'draws':0,'goal_difference':-2,'points':3}}

需按以下规则完成排序:

  • 优先按内层字典的points值降序排列
  • 若points值相等,则按wins值降序排列
  • 若wins值也相等,则按外层键(国家名称)的字母升序排列

预期排序结果:

dict_1 ={'Portugal':{'wins':3,'loses':1,'draws':1,'goal_difference':0,'points':4},'Morocco':{'wins':2,'loses':2,'draws':0,'goal_difference':-2,'points':3},'Spain':{'wins':1,'loses':0,'draws':2,'goal_difference':2, 'points':3}}

已知可通过lambda和sorted对普通字典按值排序:

sorted(dict_1.items(), key=lambda x:x[1])

但不清楚如何处理嵌套字典的多条件排序场景,希望用lambda和sorted完成需求。

解决方案

要实现多条件排序,只需在lambda表达式中返回一个排序键元组,元组内元素对应排序优先级,通过负号实现降序(sorted默认按升序处理)。

具体代码如下:

# 按规则排序字典键值对
sorted_items = sorted(dict_1.items(), key=lambda x: (-x[1]['points'], -x[1]['wins'], x[0]))

# 转换为有序字典(Python 3.7+ 原生字典保留插入顺序)
sorted_dict = dict(sorted_items)

print(sorted_dict)

代码说明

  • -x[1]['points']:对points取负,实现降序排序
  • -x[1]['wins']:当points相等时,对wins取负实现降序
  • x[0]:当points和wins都相等时,按国家名称(外层键)的字母升序排序
  • Python 3.7及以上版本的原生字典会保留键值对的插入顺序,因此直接用dict()转换即可得到有序结果

内容的提问来源于stack exchange,提问作者Naivahash80

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:37:25