python 字典排序

xychong123發表於2017-03-17

引子

字典,形如 dic = {'a':1 , 'b':2 , 'c': 3},字典中的元素沒有順序,所以dic[0]是有語法錯誤的。並且不可以有重複的鍵值,所以 dic.add['c'] = 4後,字典變成 {'a':1 , 'b':2 , 'c': 4}.

待解決問題

如何根據需要可以根據“鍵”或“鍵值”進行不同順序的排序?

函式原型

sorted(dic,value,reverse)

  • dic為比較函式,value 為排序的物件(這裡指鍵或鍵值),
  • reverse:註明升序還是降序,True--降序,False--升序(預設)

案例

dic = {'a':3 , 'b':2 , 'c': 1}

   

注意

排序之後字典沒有變,順序依舊

    

兩個函式

1.lambda

功能: 建立匿名函式

區別: 和def函式定義,以下兩點區別

  • lambda會建立一個函式物件,但不會把這個函式物件賦給一個識別符號;而def則會把函式物件賦值給一個變數
  • lambda它只是一個表示式,而def則是一個語句

案例:

   

2.iteritems()

功能: iteritems()以迭代器物件返回字典鍵值對

區別: 和item相比:items以列表形式返回字典鍵值對

案例:

   

註釋:

1:在函式sorted(dic.iteritems(), key = lambda asd:asd[1])中,第一個引數傳給第二個引數“鍵-鍵值”,第二個引數取出其中的鍵([0])或鍵值(1])

2:sort函式

一、基本形式
列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。


如果需要一個排序好的副本,同時保持原有列表不變,怎麼實現呢


注意:y = x[:] 通過分片操作將列表x的元素全部拷貝給y,如果簡單的把x賦值給y:y = x,y和x還是指向同一個列表,並沒有產生新的副本

另一種獲取已排序的列表副本的方法是使用sorted函式:


sorted返回一個有序的副本,並且型別總是列表,如下:


二、可選引數

sort方法還有兩個可選引數:key和reverse

1、key在使用時必須提供一個排序過程總呼叫的函式:


2、reverse實現降序排序,需要提供一個布林值:


3:reversed()

這個很好理解,reversed英文意思就是:adj. 顛倒的;相反的;(判決等)撤銷的


相關文章