如何按元组末元素降序、次元素排序值为元组的Python字典?
按元组多条件排序字典的实现方法
要实现你需要的排序规则(按元组最后一个元素非递增排序,相同则按元组第二个元素非递增排序),只需要修改sorted函数的key参数,让它包含两个排序条件即可。
解决方案代码
capacity = { 'one': (57000, 3100, 0.12903225806451613), 'two': (52911, 2400, 0.125), 'three': (48200, 2400, 0.125), 'four': (48200, 2480, 0.125), 'five': (11464, 1200, 0.20833333333333334), 'six': (44000, 1172, 0.21331058020477817), 'seven': (42000, 1172, 0.21331058020477817) } # 写法1:通过取负数实现降序排序 sorted_capacity = {k: v for k, v in sorted( capacity.items(), key=lambda x: (-x[1][2], -x[1][1]) )} # 写法2:使用reverse=True反转排序规则 # sorted_capacity = {k: v for k, v in sorted( # capacity.items(), # key=lambda x: (x[1][2], x[1][1]), # reverse=True # )} print(sorted_capacity)
输出结果
{'six': (44000, 1172, 0.21331058020477817), 'seven': (42000, 1172, 0.21331058020477817), 'five': (11464, 1200, 0.20833333333333334), 'one': (57000, 3100, 0.12903225806451613), 'four': (48200, 2480, 0.125), 'two': (52911, 2400, 0.125), 'three': (48200, 2400, 0.125)}
原理说明
Python的sorted函数支持通过元组形式的key实现多条件排序:
- 排序时会优先比较元组的第一个元素,当第一个元素相同时,再比较第二个元素。
- 写法1中,我们对元组的第三个元素和第二个元素取负数,利用默认的升序排序规则,让原数值更大的元素排在前面,实现降序效果。
- 写法2中,直接使用原数值作为key,再通过
reverse=True将整个排序规则反转,同样能实现先按第三个元素降序、再按第二个元素降序的需求。
内容的提问来源于stack exchange,提问作者mars
相关产品推荐
相关产品推荐

