按值和键排序

时间:2016-02-29 23:46:13

标签: python sorting dictionary

我正在寻找一些东西来按Python中的值和键对列表进行排序。我发现了这个:

list.sort(key=lambda (k, v): (-v, k))

这个lambda函数如何工作?

2 个答案:

答案 0 :(得分:2)

它按一对值对列表进行排序。由于它对列表进行排序,因此不存在任何键值对,而是彼此相邻的两个值。 它的编写方式按反向排序第二个值,然后按正常升序排序第一个值。

在此证明:

l1 = [[2,2],[3,1],[1,2],[4,1]]

l1.sort(key=lambda(k,v):(-v,k))

l1
=> [[1, 2], [2, 2], [3, 1], [4, 1]]

答案 1 :(得分:1)

校正。 list不包含keyvalue对中的值。 keyvalue对出现在字典中。下面是对值进行字典排序的代码,然后是键:

>>> d = {'apple': 2, 'banana': 3, 'almond':2 , 'beetroot': 3, 'peach': 4}
>>> sorted(d.iteritems(), key=lambda(k, v): (-v, k))
[('peach', 4), ('banana', 3), ('beetroot', 3), ('almond', 2), ('apple', 2)]

说明: d.iteritems()会返回iterator个对象。在sorted(d.iteritems(), key=lambda(k, v): (-v, k))中,key=lambda(k, v): (-v, k)表示排序首先基于值的递减顺序,即-v,然后是密钥的升序,即k

同样的逻辑适用于问题中提到的用于对列表进行排序的代码。