第一篇關(guān)于python的list中包含字典的排序和過(guò)濾

本文作者:晨海旭日。原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處。

# 定義一個(gè)list,里面的值是dict

students = [{'name':'張三','性別':'男','age':15},

{'name':'劉麗麗','性別':'女','age':25},

{'name':'李艷','性別':'女','age':35},

{'name':'王五','性別':'男','age':35},

{'name':'劉剛','性別':'男','age':17},

{'name':'李明明','性別':'男','age':19}]

# 1、輸出姓名包含“李”的dict。思考:需要遍歷list,還要過(guò)濾,該用什么,恩!列表表達(dá)式!

>>> print([stu for stu in students if "李" in stu["name"]])

[{'name': '李艷', '性別': '女', 'age': 35}, {'name': '李明明', '性別': '男', 'age': 19}]

# 思考:使用filter是否可行?

>>> print(list(filter(lambda x:"李" in x["name"], students)))

[{'name': '李艷', '性別': '女', 'age': 35}, {'name': '李明明', '性別': '男', 'age': 19}]

# 2、輸出姓名包含“李”的姓名列表。思考:既然上步都能輸出list中的字典,那取dict中的某個(gè)值不就簡(jiǎn)單了。

>>> print([stu["name"] for stu in students if "李" in stu["name"]])

['李艷', '李明明']

#思考:那filter行不行呢?自然是行的,但不簡(jiǎn)潔。

>>> print([ stu["name"] for stu in list(filter(lambda x:"李" in x["name"], students))])

['李艷', '李明明']

#思考有沒(méi)有別的方法呢?也有,可以用map,但并不簡(jiǎn)潔!

>>> print([x for x in list(map(lambda stu:stu["name"], students)) if "李" in x])

['李艷', '李明明']

#3、我想輸出最大的年齡怎么辦。思考:應(yīng)先取出所有年齡,再取最大的那個(gè)。

>>> print(max(list(map(lambda x:x["age"], students))))

35

#思考:有沒(méi)有其他的辦法,肯定有,不列舉了。

#4、我想輸出所有年齡最大的dict怎么辦。思考:第三個(gè)輸出了最大年齡,這個(gè)要輸出對(duì)應(yīng)dict。

>>> print(list(filter(lambda y:y["age"] == max(list(map(lambda x:x["age"], students))), students)))

[{'name': '李艷', '性別': '女', 'age': 35}, {'name': '王五', '性別': '男', 'age': 35}]

#又臭又長(zhǎng)有木有,暫時(shí)沒(méi)想到好方法,當(dāng)然for循環(huán)是可以的。

#5、我想按年齡降序排序(35后就會(huì)很難?。。?。排序有兩個(gè)方法,sort和sorted,sort是list的方法,注意該方法是對(duì)原始的list排序,返回值是None,sorted可以對(duì)很多數(shù)據(jù)類型排序。

>>> print(sorted(students, key = lambda stu:stu["age"], reverse = True))

[{'name': '李艷', '性別': '女', 'age': 35}, {'name': '王五', '性別': '男', 'age': 35}, {'name': '劉麗麗', '性別': '女', 'age': 25}, {'name': '李明明', '性別': '男', 'age': 19}, {'name': '劉剛', '性別': '男', 'age': 17}, {'name': '張三', '性別': '男', 'age': 15}]

# sort方法如何做呢?

>>> students.sort(key = lambda stu:stu["age"], reverse = True); print(students)

[{'name': '李艷', '性別': '女', 'age': 35}, {'name': '王五', '性別': '男', 'age': 35}, {'name': '劉麗麗', '性別': '女', 'age': 25}, {'name': '李明明', '性別': '男', 'age': 19}, {'name': '劉剛', '性別': '男', 'age': 17}, {'name': '張三', '性別': '男', 'age': 15}]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容