如何在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
相关产品推荐
相关产品推荐

