python 使用內置函數sorted對各種數據類型進行排序


python有兩個內置的函數用於實現排序,一個是list.sort()函數,一個是sorted()函數。

區別1:list.sort()函數只能處理list類型數據的排序;sorted()則可以處理多種類型數據的排序。

區別2:list.sort()會修改原來的list為排序后的結果;sorted()不會修改原來的數據,只是返回一個排序后的對象。

下面來動手寫點代碼進行測試:

list進行簡單的排序

1 >>>a=['a','f','c','x','e']
2 >>>a.sort()
3 >>>a
4 [a', 'c', 'e', 'f', 'x']

sorted()進行簡單排序

1 >>>a=['a','f','c','x','e']
2 >>>a_new=sorted(a)
3 >>>a_new
4 ['a', 'c', 'e', 'f', 'x']

list.sort()和sorted都有默認的參數reverse,該參數的默認值為“False”,即默認升序排列。如果要進行降序排列:

1 >>>a=['a','f','c','x','e']
2 >>>a_new=sorted(a,reverse=True)
3 >>>a_new
4 ['x', 'f', 'e', 'c', 'a']

對元組進行排列,不能使用list.sort()函數:

1 >>>a=('a','f','c','x','e')
2 >>>a_new=a.sort()
3 
4 ttributeError: 'tuple' object has no attribute 'sort'

對字典的排序可以按照字典的key或者value進行排序:

1 >>>dic={"aa":11,"ff":5,"ee":22}
2 >>>print sorted(dic.keys())
3 ['aa', 'ee', 'ff']

從python2.4開始list.sort()和sorted()都引入了key參數來指定一個函數進行排序,有了key參數以后我們就可以對更加復雜的數據進行排序 。

假如需要排序的數據為一個list,但list的每一個元素都是一個字典,排序的方法如下:

 >>>dic=[{"name":"sunny","age":20},
         {"name":"bell","age":5},
         {"name":"jim","age":1},
         {"name":"jan","age":10}]
>>>print sorted(dic,key=lambda arg:arg.get('age'),reverse=False)  #按照每個字典的age的值進行排序,字典的方法dict.get(key)將返回指定鍵的值。
     #輸出結果為:[{'age': 1, 'name': 'jim'}, {'age': 5, 'name': 'bell'}, {'age': 10, 'name': 'jan'}, {'age': 20, 'name': 'sunny'}]
 >>>print sorted(dic,key=lambda arg:arg.get('name'),reverse=False)  #按照每個字典的name的值進行排序
      #輸出結果為:[{'age': 5, 'name': 'bell'}, {'age': 10, 'name': 'jan'}, {'age': 1, 'name': 'jim'}, {'age': 20, 'name': 'sunny'}]

 

假如需要排序的數據為一個二維的list,即list的每一個元素也是一個list,方法與上面的例子類似:

>>>a=[['100','8','30'],['200','5','50'],['300','1','20']]
>>>print sorted(a,key=lambda arg:arg[1]) #按照每個list的第1個元素進行排序
[['300', '1', '20'], ['200', '5', '50'], ['100', '8', '30']]

 

前面的2個例子中,key參數的值都是函數。在sorted函數中,key參數后面的函數的參數的數量只能是一個。lambda arg:arg.get('age')是一個lambda匿名函數,它是一個沒有函數名的單語句函數。冒號左邊是參數,冒號右邊的返回值,返回值將被用於排序。

 


免責聲明!

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



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