列表中的字典排序
y_list =[
{"name":"a","height":175},
{"name":"b","height":160},
]
需求:根据身高进行排序,降序
y_list =[
{"name":"a","height":175},
{"name":"b","height":160},
]
tt= sorted(y_list,key=lambda line:line['height'],reverse=True)
print(tt)
分离正负数
in_list = [1,2,3,4,6,3,-3,5,-7,8,12,-6]
out_list = sorted(in_list,key=lambda x:(x<0,abs(x)))
print(out_list)#[1, 2, 3, 3, 4, 5, 6, 8, 12, -3, -6, -7]
sorted和列表的sort方法不同: sort只是列表的方法,sorted可以对所有可迭代对象进行排序
sorted语法
sorted(iterable, cmp=None, key=None, reverse=False)
iterable:可迭代对象,数组、字符串、元祖、字典、集合等等均为可迭代对象。
cmp: 比较函数,接收两个参数,两个参数均为从可迭代对象中迭代出来的元素,比较规则须遵循大于返回1,小于返回-1,等于返回0
key: 用来作为比较的元素。
reverse:是否反转,默认为False。默认小的是是排在前面,也就是升序。
正负数分离解析
lambda x:(x<0,abs(x))等价于
def func(x)
return (x<0,abs(x))
比如分别传入-2,2则分别返回(True,2)、(False,2),相当与变成了元祖的比较,先比较第一个元素,如果第一个元素大于则大于,小于则小于,如果第一个元素相等,则比较第二个元素,依次类推。
print((True,2)<(False,2))#False
表示(True,2)>(False,2)
根据sorted默认小的排前面,也就是说正数排在负数的前面。
当同为正数或者同为负数时,比较第二个元素,第二元素为绝对值,也就是说当分别传入-1和-2时lambda返回(True,1)、(True,2),2比1大,所以-2排在-1后面。
验证默认小的排在前面和lambda中的绝对值
a_list=[1,5,3,4,2,6]
print(sorted(a_list))
b_list=[-6,-4,-9,-1,-7]
print(sorted(b_list))
c_list = [-6,-4,-9,-1,-7]
print(sorted(c_list,key=lambda x:abs(x)))