1. 程式人生 > >Python實戰小程式——簡單的排序

Python實戰小程式——簡單的排序

實戰要求:陣列套字典的排序(用lambda實現)

dict = [
{'id':'4','name':'b'},
{'id':'6','name':'c'},
{'id':'3','name':'a'},
{'id':'1','name':'g'},
{'id':'8','name':'f'}

]

排序後:[{'id': '1', 'name': 'g'}, {'id': '3', 'name': 'a'}, {'id': '4', 'name': 'b'}, {'id': '6', 'name': 'c'}, {'id': '8', 'name': 'f'}]

     首先介紹一下Python中排序的兩個函式:sort()和sorted()。

1、sort()

     sort()函式是Python的內建函式,基本形式如下:sort(fun,key,Reverse=False),第一個引數fun指的是函式所運用的排序演算法:預設為歸併排序。第二個引數key,指的是自己規定的排序規則,一般可以用匿名函式,此排序規則會在元素比較之前被呼叫。第三個引數Reverse表示的是升序還是降序,預設為False時為升序,Reverse=True可改為升序,並且sort函式會改變當前物件。 

總結一句話:sort()是可變物件(字典、列表)的方法,無引數,無返回值,sort()會改變可變物件,因此無需返回值

2.sorted()

     sorted()函式是一個全域性函式,基本形式和sort()相似,但是不同的是它會返回一個全新的排序後的副本,而不是改變當前物件。還有一點不同的是:sorted()是python的內建函式,並不是可變物件(列表、字典)的特有方法,sorted()函式需要一個引數(引數可以是列表、字典、元組、字串),無論傳遞什麼引數

,都將返回一個以列表為容器的返回值,如果是字典將返回鍵的列表。

#coding:utf-8    
  
list1 = [(2,'huan',23),(12,'the',14),(23,'liu',90)]  
  
#使用預設引數進行排序,即按照元組中第一個元素進行排序  
list1.sort()  
print list1  
#輸出結果為[(2, 'huan', 23), (12, 'the', 14), (23, 'liu', 90)]  
  
#使用匿名錶達式重寫key所代表的函式,按照元組的第二個元素進行排序  
list1.sort(key=lambda x:(x[1]))  
print list1  
#[(2, 'huan', 23), (23, 'liu', 90), (12, 'the', 14)]  
  
#使用匿名錶達式重寫key所代表的函式,按照元組的第三個元素進行排序  
list1.sort(key=lambda x:(x[2]))  
print list1  
#[(12, 'the', 14), (2, 'huan', 23), (23, 'liu', 90)]  
  
#使用匿名函式重寫key所代表的函式,先按照元組中下標為2的進行排序,  
# 對於下標2處元素相同的,則按下標為0處的元素進行排序  
list1.sort(key=lambda x:(x[2],x[0]))  
print list1  
#[(12, 'the', 14), (2, 'huan', 23), (23, 'liu', 90)]  
list1 = [(2,'huan',23),(12,'the',14),(23,'liu',90)]   

list2 = sorted(list1,key=lambda x:(x[2]))  
print list2
<pre name="code" class="python">#[(12, 'the', 14), (2, 'huan', 23), (23, 'liu', 90)]  
上面是幾個簡單的例子,幫助理解。

理解了上面的幾個例子,那麼下面的解題就顯得相當簡單了。

#coding=utf-8
dict = [
{'id':'4','name':'b'},
{'id':'6','name':'c'},
{'id':'3','name':'a'},
{'id':'1','name':'g'},
{'id':'8','name':'f'}
]
mydict=sorted(dict, key=lambda x:x["id"])
print mydict

排序成功!~

人生苦短,我用python。