前言
關於匿名函數的使用及應用之前的文章也有講過,本文再來講解一個關於匿名函數的一個案例:使用匿名函數實現對list列表進行排序。
list.sort()函數
1、定義一個元素類型為整型的list列表,然後排序
運行結果是:
排序之前,list1列表中的內容: [10, 50, 20, 57, 90]
排序之後,list1列表中的內容: [10, 20, 50, 57, 90]
2、定義一個元素類型為字符串類型的list列表,然後排序
運行結果是:
排序之前,list1列表中的內容: ['appen', 'HelloWorld', 'blog', 'Spring', 'MyBatis']
排序之後,list1列表中的內容: ['HelloWorld', 'MyBatis', 'Spring', 'appen', 'blog']
3、定義一個元素類型為字典的list列表,然後排序
運行結果是:
發現並沒有排序,提示錯誤,原因是:"<"不支持字典與字典之間的排序。那麼問題來了,這個sort函數到底是怎麼做到排序的呢?
sort()函數講解
剛才提到,對list列表中元素類型為字典的數據類型不支持排序,那麼就有必要去查看一下sort()函數的說明文檔。
說明:
reverse : 是一個邏輯值,False表示升序排序,True表示降序排序。
key:默認值為None,表示如果不指定參數則直接使用list列表中的元素進行排序,而數字和字符串是可以自身排序的,所以沒有問題。這個key也可以接收一個只帶有一個參數的函數,作用是指定要比較的對象。
注意:
通過對sort()函數分析,發現如果一個列表中是字典類型,那麼使用sort()函數就不能排序了,原因在於字典本身是不能排序,那麼我們就可以給sort()函數通過key傳遞要比較的參數進而實現排序。
使用匿名函數對list列表排序
剛才提到了,這個sort()函數需要接受一個key參數,而這個key參數是需要接收一個函數,那使用匿名函數就可以解決問題。
需求:按照age進行升序排序。
運行結果:
排序之前,list1列表中的內容: [{'name': 'HelloWorld', 'age': 10}, {'name': 'Spring', 'age': 30}, {'name': 'append', 'age': 25}]
排序之後,list1列表中的內容: [{'name': 'HelloWorld', 'age': 10}, {'name': 'append', 'age': 25}, {'name': 'Spring', 'age': 30}]
分析:
給sort()函數傳遞一個匿名函數,這個匿名函數其實就是排序的依據,只是目前使用的age進行排序。
總結
以上就是關於使用匿名函數對list列表中是字典數據類型的一個排序案例,通過這個案例,我們應該可以去體會到匿名函數的簡潔和實現代碼的優雅,匿名函數需要特別的掌握哦。