Python對列表內部的字典進行排序 --lambda,sort


我的需求

定義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的優點:

  1. 使用python寫一些執行腳本時,使用lambda可以省去定義函數的過程,讓代碼更加精簡
  2. 對於一些抽象的,不會別的地方復用的函數,有時候給函數起個名字也是個難題,使用lambda不需要考慮命名的問題。
  3. 使用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)]

參考文檔

Python-lambda用法
如何實現python語言中列表中的字典類型元素排序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM