Python字典里的5個黑魔法
Python裡面有3大數據結構:列表,字典和集合.字典是常用的數據結構,裡面有一些重要的技巧用法,我把這些都整理到一起,熟練掌握這些技巧之後,對自己的功力大有幫助.
1.字典的排序:
用萬金油sorted()函數
舉一個簡單的例子
my_dict={"cc":100,"aa":200,"bb":10}
print(sorted(my_dict.iteritems(),key=lambda x:x[0]))#表示按照key排序
>>>[(aa, 200), (bb, 10), (cc, 100)]
print(sorted(my_dict.iteritems(),key=lambda x:x[1]))#表示按照value排序
>>>[(bb, 10), (cc, 100), (aa, 200)]
注意原始的my_dict本身順序並沒有變(不信你可以print看看),排序是通過sorted()返回了一個新的字典
另外一種做法,因為字典是無序,若你一開始設計的時候就希望這個數據結構,按照的添加的順序進行有序排列(比如讀取CSV文件),那麼我們就是利用collection模塊裡面的OrderedDict()處理:
from collections import OrderedDict
orderDict=OrderedDict()
orderDict[a]=1
orderDict[b]=2
orderDict[c]=3
print(orderDict)
>>>OrderedDict([(a, 1), (b, 2), (c, 3)])
對比一下,若是普通的dict是亂序的,若不用OrderedDict()
orderDict=dict()
orderDict[a]=1
orderDict[b]=2
orderDict[c]=3
print(orderDict)
>>>{a: 1, c: 3, b: 2}
最後要提醒一下:OrderedDict()雖然是好東西,但是它內部維護了一個雙向鏈表,若數據量很大的話,會非常消耗內存.
2.字典的取值
字典中取值大家很容易想到用dict[key],這個有什麼難的,確實一般取值是這樣的,但是你有沒有想過若你取的值不存在,就會發生異常,風險很大.(良好的代碼,一定是要考慮健壯性,切記)
因為試圖通過索引的方式去取值,比如dict[key],當key不是字典dict的鍵,會引起異常,有沒有什麼兩全的辦法有值的時候取值,沒有值的時候即使我取不到也不會發生異常
答案是有的,python早就給你準備好了.我們用dict.get()
建議:盡量用dict.get()來代替dict[key]
3.字典中提取部分子集
我們原來有一個長的字典,我們想提取其中一部分變成另外一個子集,我們怎麼做呢,我們來看一個小例子:
students_score={jack:80,james:91,leo:100,sam:60}
#提取分數超過90分的學生信息,並變成字典
我們可以用字典推導式,輕鬆搞定
good_score={name:score for name,score in students_score.items() if score>90}
print(good_score)
>>>{james: 91, leo: 100}
4.字典的計算
比如我們有一個字典是記錄股票的價格呢,一般key都是股票的名字,而value是價格,若我們想對價格進行計算,應該如何處理呢,我們還是通過實例來講解:
下面是一個股票價格的字典,我們希望得到裡面的最大值,最小值
stocks={wanke:25.6,wuliangye:32.3,maotai:299.5,huatai:18.6}
一般有幾種方法:
利用字典的values():
利用神奇的zip()進行翻轉(zip詳細用法我前面的文章裡面經過,可以從歷史文章裡面找一下)
5.字典的翻轉
在處理複雜的數據結構的時候,有的時候希望把字典翻轉,一般用推導列表進行過渡,然後再用dict()函數編程字典:
若碰到比較大的字典,數據量很多很長的時候,最好用Python標準庫里的itertools模塊(順便說一下,這個模塊非常有用,大家可以關注一下)
from itertools import izip
invert_stocks2=dict(izip(stocks.itervalues(),stocks.iterkeys()))
print(invert_stocks2)
以上就是對Python字典的一些技巧總結和自己的感悟,希望我寫的對大家有一點點幫助,能給大家在日常使用python中能提高一些技巧,也不枉我大半夜碼這麼多字。
最後說一下,原創不易,希望大家能夠給點支持,歡迎轉發,留言,也是對我的一點鼓勵和動力.
也歡迎更多喜歡Python的同學關注 菜鳥學python,一起來學python吧 長按下方的二維碼即可關注.
推薦閱讀:
※Github上同學總結的機器學習和deeplearning方面的很全的資料
※ruby和python該學那一個?
※厲害了word哥,互動式實時監控調整python程序執行!
※Python __slots__ 詳解
※Python 詞雲分析周杰倫《晴天》