1. 深刻dictapp
from collections.abc import Mapping,MutableMapping # dict 屬於mapping類型 a = {} print(isinstance(a,MutableMapping))
2.經常使用方法:函數
a = {"bobby1":{"company":"imooc"}, "bobby2:":{"company":"imooc"}} # clear # a.clear() #copy,返回淺拷貝 # new_dict = a.copy() # new_dict["bobby1"]["company"] = "imooc3" # 深拷貝 # import copy # new_dict = copy.deepcopy(a) # new_dict["bobby1"]["company"] = "imooc3" # fromkeys new_list = ["bobby1","bobby2"] new_dict = dict.fromkeys(new_list,{"company":"imooc"}) # get # value = new_dict.get("bobby",{}) # print(value) #items # for key,value in new_dict.items(): # print(key,value) # setdefault # 他對去調用D.get(k,d)同時D[k] 設置 default_value = new_dict.setdefault("bobby","imooc") print(new_dict) # update: new_dict.update(bobby="imooc") new_dict.update([("bobby","imooc")]) new_dict.update((("bobby","imooc"),))
3. dict的子類性能
# 不建議繼承list和dict class Mydict(dict): def __setitem__(self,key,value): super().__setitem__(key,value*2) my_dict = Mydict(one=1) my_dict["one"] = 1 print(my_dict)
# 建議用UserDict from collections import UserDict class Mydict(UserDict): def __setitem__(self,key,value): super().__setitem__(key,value*2) my_dict = Mydict(one=1) print(my_dict)
from collections import defaultdict class Mydict(UserDict): def __setitem__(self,key,value): super().__setitem__(key,value*2) my_dict = Mydict(one=1) print(my_dict) my_dict = defaultdict(dict) my_value = my_dict["bobby"] # __missing__方法,若是找不到某個key,那麼實現一個keyvalue
記住:其實setdefault裏面實現了__missing__魔法函數,表示若是是找不到某個key,那麼實現一個默認的keyvaluespa
3. set和frozensetcode
# set 集合 frozenset 不可變集合 無序 不重複 s = set('abcde') s = set(['a','b','c']) print(s) # 初始化方法 s = {'a','b'} print(type(s)) s2 = frozenset('abcde') # 不可變的類型,能夠做爲dict的key print(s2)
記住:和數學的操做同樣,差集,交集,並集等。。對象
記住:在去重上應用很高,性能很高。blog
記住:還能夠用:繼承
for "c" in set: print ("i am in set")
記住:這裏就實現了__contain__方法內存
記住:還有實現了__issubset__方法get
4. dict和set他們背後實現的原理:
1. dict的key或者set的值都是必須能夠hash的,不可變對象都是能夠hash的,str,fronzenset,tuple,本身實現的類的__hash__
2. dict的內存花銷大,可是查詢速度快,自定義的對象或者Python內部的對象都使用dict包裝的。
3.dict的存儲順序和元素添加順序有關。
4.添加數據有可能改變已有數據的順序。
5.list和array是一種自增的方式,隨着數據在增長,申請內存空間的動做不斷操做。
6.dict只有在內存空間少於1/3的時候纔會去申請內存空間。