Python說文解字_雜談07

 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的時候纔會去申請內存空間。 

相關文章
相關標籤/搜索