1.clear
clear的功能是對dict 的内容進行清除.沒有任何的傳回值
a={"person1":{"Andy":30},"person12":{"Lady":45}}
a.clear()
print(a)
列印結果
{}
2.copy
copy 分為兩種類型 軟copy 和硬copy,又什麼差別呢, 為了
解釋清楚,我用代碼解釋
a={"person1":{"Andy":30},"person12":{"Lady":45}}
new_a=a.copy()
print(new_a)
new_a['person1']["Andy"]=60
print(new_a)
print(a)
請看列印結果:
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}}
{'person1': {'Andy': 60}, 'person12': {'Lady': 45}}
{'person1': {'Andy': 60}, 'person12': {'Lady': 45}}
軟copy是指:
我們隻是修改 new_a 的value值,但是我們發現 a 的值也改變了,
原理是:它并不是複制了一份,而隻是把指針指向了original的值.
有小夥伴該說了硬copy 如何實作,我們要應用copy子產品的 deepcopy方法.
import copy
a={"person1":{"Andy":30},"person12":{"Lady":45}}
new_a=copy.deepcopy(a)
print(new_a)
new_a['person1']["Andy"]=60
print(new_a)
print(a)
列印結果.
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}}
{'person1': {'Andy': 60}, 'person12': {'Lady': 45}}
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}}
我們已經完成了 硬copy(深copy). 深copy 就是 複制一份,重新換個ID 如果操作 copy 的資料,不會影響
original的資料
3.fromkeys
請看下源碼裡面有詳細的解釋
@staticmethod # known case
def fromkeys(*args, **kwargs): # real signature unknown
""" Returns a new dict with keys from iterable and values equal to value. """
pass
看到裝飾器應該明确這個是靜态方法, 是可以直接用類名調用的,
看return 描述 傳回的是一個新的dict ,并且 keys 和value 對應的關系.
這樣說小夥伴一定很迷茫,老規矩上代碼
a=["person1","person2"]
b=dict.fromkeys(a,"company")
print(b)
列印結果:
{'person1': 'company', 'person2': 'company'}
其中 company 一直會當做value, a 會當做key進行比對.
4.get
get方法用到的地方很多,是解決key沒有對應的value 報錯的問題
例如
a={"person1":{"Andy":30},"person12":{"Lady":45}}
print(a["person"])
列印結果:
KeyError: 'person'
如果解決這個問題呢, 看下邊的代碼:
a={"person1":{"Andy":30},"person12":{"Lady":45}}
print(a.get("person","bady"))
列印結果:
bady
如果取不到key 的值,就用後邊的預設值**“body”.**
這個是巧妙的運用,避免報錯,後邊有個方法如果不存在也可以把值導入dict裡面.
.
5.items
這個就不用介紹了吧,咱們經常用在for循環裡,周遊我們的key ,value.
6.keys
a={"person1":{"Andy":30},"person12":{"Lady":45}}
print(a.keys())
列印結果:
dict_keys(['person1', 'person12'])
7.pop,popitem
太簡單了直接上個例子就行,我也不解釋了
a={"person1":{"Andy":30},"person12":{"Lady":45}}
print(a.pop("person1"))
print(a.popitem())
列印結果
{'Andy': 30}
('person12', {'Lady': 45})
8.setdefault
實際用的人很少,熟悉的人很少,我先介紹下吧.
先看源碼,小夥伴應該具備的素質,不懂就翻看看,裡面說明已經很清晰了
def setdefault(self, k, d=None): # real signature unknown; restored from __doc__
""" D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D """
pass
通過上邊我們發現它用了get方法,并且可以set 值.這個就比較厲害了 ,我們看例子吧
1.當key 存在的情況下.
a={"person1":{"Andy":30},"person12":{"Lady":45}}
print(a.setdefault("person12"))
print(a)
列印結果:
{'Lady': 45}
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}}
通過結果可以看出是傳回的value值,和get 的功能一樣,
2.當key 不存在的情況下,會set值 進入dict裡面
a={"person1":{"Andy":30},"person12":{"Lady":45}}
defaut_value=a.setdefault("person3",30)
print(defaut_value)
print(a)
列印結果如下:
30
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}, 'person3': 30}
30 是傳回的value 值,它也會進入dict 裡面 .
9.update
下邊是我再源碼截取的一段話,通過這段話,
我們就很清晰知道,“E”欄位我們要求是iterable 就行,不能僅僅想到dict.
這點要注意.
D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
這個方法目的是合并兩個iterble 類型,例子如下
a={"person1":{"Andy":30},"person12":{"Lady":45}}
b={"person6":{"Andy":40},"person20":{"Lady":80}}
print(b.update(a))
print(b)
print(a)
列印結果
None
{'person6': {'Andy': 40}, 'person20': {'Lady': 80}, 'person1': {'Andy': 30}, 'person12': {'Lady': 45}}
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}}
要清晰知道
1.a.update(b)是沒有任何傳回值
2.隻是針對a進行update,b 不會有任何變化
3.a 會得到合并後的值.
4.a必須是個dict才能用update 方法
有小夥伴該說了,你說不僅僅隻限制于dict ,那你請列出一個是不是dict例子
好吧,滿足你的好奇心.
b={"person1":{"Andy":30},"person12":{"Lady":45}}
b.update(a=1,b=2)
print(b)
列印結果:
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}, 'a': 1, 'b': 2}
再送給你一個list 的類型的
b={"person1":{"Andy":30},"person12":{"Lady":45}}
a=[("maggie",20),("LIN",20)]
b.update(a)
print(b)
列印結果:
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}, 'maggie': 20, 'LIN': 20}
總結:
這些方法我們要清晰知道他們如何操作的,合理利用.
并認識類型的重要性 比如iterble ,不要老是想着 list,tuple,dict.
還有再次提醒要翻看源碼,裡面寫的很詳細.