Python 排序分组问题

_list = [{'value': 123, 'upclock': 1234567}, 
        {'value': 423, 'upclock': 2123},
        {'value': 123, 'upclock': 1234567}, 
        {'value': 423, 'upclock': 1123},
         {'value': 423, 'upclock': 1123}, 
         {'value': 872, 'upclock': 1234567},
         {'value': 423, 'upclock': 80}]
         
print sorted(_list, key=lambda x: (x['value'], x['upclock']), reverse=True)

结果

[{'upclock': 1234567, 'value': 123}, 
{'upclock': 1234567, 'value': 123}, 
{'upclock': 80, 'value': 423}, 
{'upclock': 1123, 'value': 423}, 
{'upclock': 1123, 'value': 423}, 
{'upclock': 2123, 'value': 423}, 
{'upclock': 1234567, 'value': 872}]

上面是一个很简单的例子,先按照value来排序,再按照upclock排序。 有个字段reverse控制是否升降序的,但是这个控制的是整体的。我想要这样的效果,就是默认是升序,但是第二个排序字段upclock又是降序的

结果应该是这样

[{'upclock': 1234567, 'value': 123}, 
{'upclock': 1234567, 'value': 123}, 
{'upclock': 2123, 'value': 423}, 
{'upclock': 1123, 'value': 423},
{'upclock': 1123, 'value': 423}, 
{'upclock': 80, 'value': 423},
 {'upclock': 1234567, 'value': 872}]

应该怎么写呢?能直接用标准库来实现吗,或者简单一点的逻辑

阅读 1.9k
1 个回答

在要反序的key前边加个“-”就可以了

_list = [{'value': 123, 'upclock': 1234567},
        {'value': 423, 'upclock': 2123},
        {'value': 123, 'upclock': 1234567},
        {'value': 423, 'upclock': 1123},
         {'value': 423, 'upclock': 1123},
         {'value': 872, 'upclock': 1234567},
         {'value': 423, 'upclock': 80}]

_list.sort(key=lambda x:(x['value'],-x['upclock']))
print(_list)

输出:

[{'value': 123, 'upclock': 1234567}, 
{'value': 123, 'upclock': 1234567},
 {'value': 423, 'upclock': 2123},
 {'value': 423, 'upclock': 1123},
 {'value': 423, 'upclock': 1123},
 {'value': 423, 'upclock': 80}, 
{'value': 872, 'upclock': 1234567}]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题