一段审、sorted高階函數(shù)
例子:
d={'a':1,'c':3,'b':2} # 首先建一個字典d
#d.items()返回的是: dict_items([('a', 1), ('c', 3), ('b', 2)])
d_order=sorted(d.items(),key=lambda x:x[1],reverse=False) # 按字典集合中,每一個元組的第二個元素排列抑淫。
# x相當于字典集合中遍歷出來的一個元組姥闪。
print(d_order) # 得到: [('a', 1), ('b', 2), ('c', 3)]
下面是sorted排序方法的詳細解釋:
- sorted高階函數(shù)語法格式: sorted(可迭代對象,key=函數(shù)名,reverse=False/True)
作用:從可迭代對象中,依次取出一個元素筐喳,該元素再按照key規(guī)定的排列依據(jù)排序。
可迭代對象:即可依次取值的對象荣月,例如:集合槐脏,序列(列表,字符串顿天,元組),字典等咽白。
key : 是列表排列的依據(jù),一般可以自定義一個函數(shù)返回排序的依據(jù)晶框,再把函數(shù)名綁定給key。
reverse : 譯為反轉(zhuǎn)蹲蒲,reverse默認等于False,從小到大排序届搁。等于True時窍育,從大到小排序。
- 匿名函數(shù)lambda的格式: 函數(shù)名 = lambda [形參1,形參2,...] : 漱抓,返回操作語句塊產(chǎn)生的結(jié)果并綁定給函數(shù)名。
例如:
key=lambda x : x[1]
x:相當于字典集合中的一個元組瞬逊, 例:dict_items([('a', 1), ('c', 3), ('b', 2)])中的('a', 1)或('c', 3)或('b', 2)
x[1]: 返回x中的第二個元素补胚,即鍵值對元組中的值追迟。dict_items([('a', 1), ('c', 3), ('b', 2)])中的1或2或3
注意:
(1) sorted函數(shù)中的可迭代對象不要用字典d,那樣只能迭代出的字典d的鍵敦间。要用d.items()才可迭代出字典的鍵值對。
例:
不能用 d_order=sorted(d,key=lambda x:x[1],reverse=False)
要用 d_order=sorted(d.items(),key=lambda x:x[1],reverse=False)
(2) sorted函數(shù)排好序后厢绝,要綁定一個對象(賦值)带猴,例:d_order=sorted(d.items(),key=lambda x:x[1],reverse=False).
因為字典是無序類型,用sorted函數(shù)排好序后不綁定d_order拴清,字典會自動打亂順序。
二口予、列表的.sort()方法
Python中的字典是無序類型,沒有自己的排序方法煤辨。但可以用列表的.sort()方法來進行排序。
我們首先要把字典轉(zhuǎn)換為列表众辨,再進行排序。
例子:
d={'a':1,'c':3,'b':2} # 首先建一個字典d
d.items() # 得到: dict_items([('a', 1), ('c', 3), ('b', 2)])
L=list(d.items()) # 得到列表: L=[('a', 1), ('c', 3), ('b', 2)]
L.sort(key=lambda x:x[1],reverse=False) # 按列表中技肩,每一個元組的第二個元素從小到大排序浮声。
# x代表從L中遍歷出的一個元組
print(L) # 得到: [('a', 1), ('b', 2), ('c', 3)]
注意:
1.上面的例子中最要的一步就是: L=list(d.items()), 即: L = list(dict_items([('a', 1), ('c', 3), ('b', 2)])
用list()列表構(gòu)造函數(shù),將L= dict_items([('a', 1), ('c', 3), ('b', 2)]) 轉(zhuǎn)變?yōu)榱斜砣蝗玫搅斜? L=[('a', 1), ('c', 3), ('b', 2)] 。
ps: 今天早上我折騰了好久才發(fā)現(xiàn)剧浸,list()構(gòu)造函數(shù)竟然可以把 d.items()產(chǎn)生的dict_items鍵值對集合類型矗钟,直接變成列表,簡直NB岸滞А!
2.再簡單說一下列表的L.sort()方法: L.sort(key=函數(shù)名,reverse=False/True)
L.sort():會自動遍歷列表中的元素冯吓,即依次取出一個元素疮跑。再以key綁定的函數(shù)為依據(jù)排序。
例如:
L.sort(key=lambda x:x[1],reverse=False) #L=[('a', 1), ('c', 3), ('b', 2)]
從列表L中取出第一個元素('a', 1)元組祖娘,以元組的第二個元素'1'為排序依據(jù),
再依次從列表中依次取出第二掀潮,第三,...個元素確定排序依據(jù)整以,
最后reverse=False胧辽,按從小到大的順序排列公黑。
按字典值排序(默認為升序)
x = {1:2, 3:4, 4:3, 2:1, 0:0}
sorted_x = sorted(x.iteritems(), key=lambda x : x[1])
包含字典dict的列表list的排序方法
users = [{"name":"1","age":"30"},{"name":"2","age":"25"},{"name":"3","age":"20"}]
print(users)
sorted_users = sorted(users, key=lambda x : x["age"])
print(sorted_users)