引
字典,形如 dic = {'a':1 , 'b':2 , 'c': 3},字典中的元素沒有順序,因此dic[0]是有語法錯誤的。而且不能夠有重複的鍵值,因此 dic.add['c'] = 4後,字典變成 {'a':1 , 'b':2 , 'c': 4}.函數
待解決問題
如何根據須要能夠根據「鍵」或「鍵值」進行不一樣順序的排序?post
函數原型
sorted(dic,value,reverse)spa
- dic爲比較函數,value 爲排序的對象(這裏指鍵或鍵值),
- reverse:註明升序仍是降序,True--降序,False--升序(默認)
案例1
dic = {'a':3 , 'b':2 , 'c': 1}3d
注意code
排序以後原字典沒有變,順序依舊htm
案例2
>>> a_dic = {'a':{'val':3}, 'b':{'val':4}, 'c':{'val':1}} >>> dict= sorted(a_dic.iteritems(), key=lambda d:d[1]['val'], reverse = True) >>> dict [('b', {'val': 4}), ('a', {'val': 3}), ('c', {'val': 1})]
例子中「鍵-值」對中的值是字典,例子對其進行排序。對象
那若是「鍵值」對中值字典的某一特定鍵不存在,咋處理呢,參考blog
>>> a = {'a':{'val':3}, 'b':{'val':4}, 'c':{'val':1}, 'd':{'val2':0}} >>> a {'a': {'val': 3}, 'c': {'val': 1}, 'b': {'val': 4}, 'd': {'val2': 0}} >>> dict= sorted(a.iteritems(), key=lambda d:d[1]['val'], reverse = True) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <lambda> KeyError: 'val' >>> dict= sorted(a.iteritems(), key=lambda d:d[1].get('val',0), reverse = True) >>> dict [('b', {'val': 4}), ('a', {'val': 3}), ('c', {'val': 1}), ('d', {'val2': 0})]
兩個函數
1.lambda排序
功能: 建立匿名函數
區別: 和def函數定義,如下兩點區別
- lambda會建立一個函數對象,但不會把這個函數對象賦給一個標識符;而def則會把函數對象賦值給一個變量
- lambda它只是一個表達式,而def則是一個語句
案例:
2.iteritems()
功能: iteritems()以迭代器對象返回字典鍵值對
區別: 和item相比:items以列表形式返回字典鍵值對
案例:
註釋: 在函數sorted(dic.iteritems(), key = lambda asd:asd[1])中,第一個參數傳給第二個參數「鍵-鍵值」,第二個參數取出其中的鍵([0])或鍵值(1])