列表中的字典排序
y_list =[
{"name":"a","height":175},
{"name":"b","height":160},
]
需求:根據(jù)身高進(jìn)行排序,降序
y_list =[
{"name":"a","height":175},
{"name":"b","height":160},
]
tt= sorted(y_list,key=lambda line:line['height'],reverse=True)
print(tt)
分離正負(fù)數(shù)
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可以對所有可迭代對象進(jìn)行排序
sorted語法
sorted(iterable, cmp=None, key=None, reverse=False)
iterable:可迭代對象,數(shù)組胚迫、字符串、元祖向挖、字典、集合等等均為可迭代對象却妨。
cmp: 比較函數(shù)耻陕,接收兩個參數(shù),兩個參數(shù)均為從可迭代對象中迭代出來的元素绘盟,比較規(guī)則須遵循大于返回1鸠真,小于返回-1,等于返回0
key: 用來作為比較的元素龄毡。
reverse:是否反轉(zhuǎn)吠卷,默認(rèn)為False。默認(rèn)小的是是排在前面沦零,也就是升序祭隔。
正負(fù)數(shù)分離解析
lambda x:(x<0,abs(x))等價于
def func(x)
return (x<0,abs(x))
比如分別傳入-2,2則分別返回(True,2)、(False,2)路操,相當(dāng)與變成了元祖的比較疾渴,先比較第一個元素,如果第一個元素大于則大于屯仗,小于則小于程奠,如果第一個元素相等,則比較第二個元素祭钉,依次類推。
print((True,2)<(False,2))#False
表示(True,2)>(False,2)
根據(jù)sorted默認(rèn)小的排前面己沛,也就是說正數(shù)排在負(fù)數(shù)的前面慌核。
當(dāng)同為正數(shù)或者同為負(fù)數(shù)時,比較第二個元素申尼,第二元素為絕對值垮卓,也就是說當(dāng)分別傳入-1和-2時lambda返回(True,1)、(True,2)师幕,2比1大粟按,所以-2排在-1后面。
驗(yàn)證默認(rèn)小的排在前面和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)))