我們接著來看字典還有哪些需要掌握的內(nèi)置方法。
我們看Pycharm給我們的提示,items講過了,copy其實(shí)也是講過的,是在我們前面講深淺拷貝的時(shí)候講的,其實(shí)就是把字典淺拷貝一份,列表也有這個(gè)方法。
values講了、keys講了、pop講了、clear講了、popitem講了、get講了、formkeys講了。只有最后兩個(gè)setdefault和update沒有講。
來看下這兩個(gè)方法的作用是什么。
首先來看update,其實(shí)看到這個(gè)名字我們就知道了,update本身這個(gè)單詞的意思就是更新,它的作用就是更新字典。
這就是我們前面講過的取名字要見名知意,不管你是定義變量名還是我們要自己寫的一些功能,都要這么做。讓別人看到這個(gè)名字,就大概知道這個(gè)功能有什么作用。
說到更新,很多人第一時(shí)間反應(yīng)就想到了游戲更新,我們就拿游戲更新舉例子,在我們更新游戲的時(shí)候,其實(shí)就是把原有的數(shù)據(jù)資源保留,然后把新的數(shù)據(jù)資源加進(jìn)去,同時(shí)我是不是還有可能把一部分原有的資源替換掉。
比如王者榮耀更新的時(shí)候,把原有的模型替換成更加精致的模型,這個(gè)新的數(shù)據(jù)就要去替換原來的數(shù)據(jù)。
所以一個(gè)更新的過程簡單來說就是保留不需要修改的數(shù)據(jù)替換需要修改的數(shù)據(jù),增加新數(shù)據(jù)。
對于字典更新來說也類似,我現(xiàn)在定義一個(gè)字典。
hero = {'名字': '李白',
'職業(yè)': '刺客',
'移速': '550',
'攻速': '130'}
然后再寫一個(gè)新的字典,把李白的攻速降低10,然后增加技能。
new = {'攻速': '120'
, '技能1': '將進(jìn)酒'
, '技能2': '神來之筆'
, '技能3': '青蓮劍歌'}
現(xiàn)在我們來更新hero這個(gè)字典。hero.update(),括號里面寫new。再打印一下。
hero = {'名字': '李白',
'職業(yè)': '刺客',
'移速': '550',
'攻速': '130'}
new = {'攻速': '120'
, '技能1': '將進(jìn)酒'
, '技能2': '神來之筆'
, '技能3': '青蓮劍歌'}
hero.update(new)
print(hero)
這樣就將hero這個(gè)字典里李白的移速降低成120,然后增加三個(gè)技能。這就是update的作用。
用新字典來更新老字典,老字典中存在的值就會被修改掉。老字典中不存在的值就會增加進(jìn)去。
接下來我們最后來看setdefault,setdefault翻譯成中文的意思就是設(shè)置默認(rèn)值。也就是給字典的某一個(gè)key設(shè)置默認(rèn)值。
如果這個(gè)key在字典中,就返回對應(yīng)的值,如果這個(gè)key不在字典中,就要給這個(gè)字典添加這個(gè)key。并且讓這個(gè)key的值為我們設(shè)置的默認(rèn)值,返回這個(gè)默認(rèn)值。
如果我們調(diào)研setdefault時(shí),只傳了一個(gè)參數(shù)key給它,這個(gè)默認(rèn)值就為None。
我先定義一個(gè)字典,假設(shè)這個(gè)字典就是我們采集到用戶注冊我們軟件的信息。剛剛我們說setdefault是有返回值的,如果字典本身有這個(gè)值就返回這個(gè)值,如果沒有就返回None。
info = {'name': '于謙', 'age': '55'}
info.setdefault('age')
info.setdefault('性別')
print(info)
然后我們來打印一下看。
第一個(gè)setdefault,age就是它本來的值18,不存在的這個(gè)性別,就返回成了None。
如果我不想這個(gè)性別為None,就在性別后面?zhèn)鞯诙€(gè)參數(shù),寫你想要傳的參數(shù),比如我寫一個(gè)保密。
info = {'name': '于謙', 'age': '55'}
info.setdefault('age')
info.setdefault('性別', '保密')
print(info)
未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » Python 字典類型5