我的需求
定義1個list類型的變量,名稱是test
test包含3個元素,每個元素都是dict類型
現在我想要實現的是,按照每個dict中age值的大小對test的元素進行排序
需要借助lambda
test=[{'name':'Bob','age':14},{'name':'Lisa','age':16},{'name':'Sam','age':9}]
test.sort(key=lambda i:i['name'])
print(test)
test.sort(key=lambda i:i['age'],reverse=True)
print(test)
[{'name': 'Lisa', 'age': 16}, {'name': 'Bob', 'age': 14}, {'name': 'Sam', 'age': 9}]
如果不使用lambda,也可以單獨定義1個函數來獲取 排序的元素,像這樣:
關鍵是弄清楚sort方法,key參數的使用規則
def getAge(elem):
return elem['age']
test.sort(key=getAge)
print(test)
[{'name': 'Sam', 'age': 9}, {'name': 'Bob', 'age': 14}, {'name': 'Lisa', 'age': 16}]
知識分解
Python-lambda用法
lambda函數也叫匿名函數,即,函數沒有具體的名稱
一、基礎
lambda語句構建的其實是一個函數對象。匿名函數有個限制,就是只能有一個表達式,不用寫return,返回值就是該表達式的結果
lembda(a,b:a+b)
#關鍵字lembda表示匿名函數,冒號前是參數,可以有多個,用逗事情隔開,冒號右邊的返回值
lembda的優點:
- 使用python寫一些執行腳本時,使用lambda可以省去定義函數的過程,讓代碼更加精簡
- 對於一些抽象的,不會別的地方復用的函數,有時候給函數起個名字也是個難題,使用lambda不需要考慮命名的問題。
- 使用lambda在某些時候讓代碼更容易理解。
舉一個簡單的例子:
def f(x):
return x*2
print (f(4))
8
python中使用lambda的話,寫成這樣
g=lambda x:x*2
print(g(4))
8
二、進階-內置函數
map()
遍歷序列,對序列中的每個元素進行操作,最終獲取新的序列
li=[11,22,33]
sl=[1,2,3]
new_list=map(lambda a,b:a+b,li,sl)
print(new_list)#map方法會返回一個filter對象
<map object at 0x7f31e83aad30>
print(list(new_list))
[12, 24, 36]
reduce()
對於序列內所有元素進行累計操作
from functools import reduce
li=[11,22,33]
result = reduce(lambda a,b :a+b,li)
#reduce的第1個參數,函數必須要有2個參數
#reduce的第2個參數,要循環的序列
#reduce的第3個參數,初始值
print(result)
66
filter()
對序列中的元素進行篩選,最終獲取符合條件的序列
li=[11,22,33]
new_list=filter(lambda a:a>22,li)
print(new_list)#filter方法會返回一個filter對象
<filter object at 0x7f31e9170e48>
print(list(new_list))
[33]
sort函數
先來熟悉一下普通的排序方式
如果是對list類型數據進行排序,可以使用list.sort()方法,該方法會直接修改原list元素的排列順序
b=[4,16,9]
b.sort()
b
[4, 9, 16]
b.sort(reverse=True)
b
[16, 9, 4]
如果只使用reverse()方法,可以對列表進行逆序顯示
c=[3,5,1]
c.reverse()
c
[1, 5, 3]
語法
sort()函數用於對原列表進行排序,如果指定參數,則使用比較函數指定的比較函數
語法:
list.sort(key=None,reverse=False)
參數
- key --主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代的一個元素進行排序。
- reverse --排序規則,reverse=True 降序,reverse=False 升序(默認)
返回值
該方法沒有返回值,但是會對列表的對象進行排序。
示例
alist=['Bob','Tom','Zara','Lisa']
alist.sort()#默認升序
alist
['Bob', 'Lisa', 'Tom', 'Zara']
alist.sort(reverse=True)#降序
alist
['Zara', 'Tom', 'Lisa', 'Bob']
通過指定列表中的元素進行排序
def takeSecond(elem):
return elem[1]
random=[(1,4),(5,2,),(1,9)]
random.sort(key=takeSecond)
random
[(5, 2), (1, 4), (1, 9)]