我正在寻找一些东西来按Python中的值和键对列表进行排序。我发现了这个:
list.sort(key=lambda (k, v): (-v, k))
这个lambda函数如何工作?
答案 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
不包含key
,value
对中的值。 key
:value
对出现在字典中。下面是对值进行字典排序的代码,然后是键:
>>> 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
。
同样的逻辑适用于问题中提到的用于对列表进行排序的代码。