天天看點

python3:dict常用的方法

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.

還有再次提醒要翻看源碼,裡面寫的很詳細.