簡(jiǎn)單談?wù)凱ython中的元祖(Tuple)和字典(Dict)
前言
本文記錄了對(duì)于Python的數(shù)據(jù)類(lèi)型中元祖(Tuple)和字典(Dict)的一些認(rèn)識(shí),以及部分內(nèi)置方法的介紹。下面話(huà)不多說(shuō),來(lái)看看詳細(xì)的介紹吧。
元祖 Tuple
特點(diǎn):元祖內(nèi)的數(shù)據(jù)不可變
一個(gè)元素的定義:T = (1,)
>>> T=(1,) >>> type(T) <type 'tuple'>
特殊的元祖:”可變”的元祖
>>> T=(1,2,3,[1,2,3]) >>> T[3][2] = 'vimiix' >>> T (1, 2, 3, [1, 2, 'vimiix'])
看上去元祖發(fā)生了變化,但真正變化的是[1,2,3]這個(gè)列表內(nèi)的元素發(fā)生了變化,但是這個(gè)列表在T這個(gè)元祖中的內(nèi)存地址是沒(méi)有改變的。
結(jié)論:實(shí)際是元祖的元素包含了可變的元素,但是元祖中元素的內(nèi)存地址沒(méi)有變,所以所謂的元祖不可變是指元素指向的內(nèi)存地址是不變
字典 Dict
特點(diǎn):
1、字典是Python中唯一的映射類(lèi)型
2、字典的鍵(KEY)必須是不可變的對(duì)象—>因?yàn)樽值湓谟?jì)算機(jī)中是通過(guò)Hash算法存儲(chǔ)的,Hash的特點(diǎn)是由KEY來(lái)計(jì)算存儲(chǔ)的,如果KEY可變,將會(huì)導(dǎo)致數(shù)據(jù)混亂。
>>> D = {1:3,'vimiix':88} >>> type(D) <type 'dict'>
>>> D={[1,2,3]:100} Traceback (most recent call last): File "<pyshell#15>", line 1, in <module> D={[1,2,3]:100} TypeError: unhashable type: 'list' (這里提示list是不能被Hash計(jì)算的數(shù)據(jù)類(lèi)型,因?yàn)閘ist是可變的數(shù)據(jù)類(lèi)型) >>>
由此錯(cuò)誤可以看出,字典的鍵只能使用不可變的對(duì)象(元祖是可以的),但是對(duì)于字典的值沒(méi)有此要求
鍵值對(duì)用冒號(hào)‘:'分割,每個(gè)對(duì)之間用逗號(hào)‘,'分開(kāi),所有這些用花括號(hào)‘{}'包含起來(lái)
字典中的鍵值對(duì)是沒(méi)有順序的,故不可以用索引訪問(wèn),只可以通過(guò)鍵取得所對(duì)應(yīng)的值
拓展:如果定義的過(guò)程中,出現(xiàn)相同的鍵,最后存儲(chǔ)的時(shí)候回保留最后的一個(gè)鍵值對(duì))
>>> D= {1:2,1:3} >>> D {1: 3}
創(chuàng)建與訪問(wèn)
第一種創(chuàng)建方式:直接通過(guò)花括號(hào)包含鍵值對(duì)來(lái)創(chuàng)建
第二種創(chuàng)建方式:利用內(nèi)置函數(shù)dict()
來(lái)創(chuàng)建,注意!dict()
括號(hào)內(nèi)只能有一個(gè)參數(shù),要把所有的鍵值對(duì)括起來(lái)
(1)
>>> D =dict((1,2),(3,4),(5,6)) Traceback (most recent call last): File "<pyshell#20>", line 1, in <module> D =dict((1,2),(3,4),(5,6)) TypeError: dict expected at most 1 arguments, got 3 >>> D =dict(((1,2),(3,4),(5,6))) >>> D {1: 2, 3: 4, 5: 6}
(2)還可以指定關(guān)鍵字參數(shù)
>>> D=dict(vimiix = 'VIMIIX') >>> D {'vimiix': 'VIMIIX'}
這里的小寫(xiě)‘vimiix'不可以加單引號(hào),加了會(huì)報(bào)錯(cuò)!
(3)dict的內(nèi)置方法 .fromkeys 有兩個(gè)參數(shù)
>>> D = dict.fromkeys((1,'vimiix'),('common','value')) >>> D {1: ('common', 'value'), 'vimiix': ('common', 'value')} >>>
實(shí)際的生產(chǎn)過(guò)程中,都是使用字典生成式來(lái)創(chuàng)建,根據(jù)現(xiàn)有的數(shù)據(jù)來(lái)生成對(duì)應(yīng)的數(shù)據(jù),有數(shù)據(jù)才有意義。
字典生成式栗子:
>>> L1 = [1,2,3] >>> L2 = ['a','v','vimiix'] >>> D={a:b for a in L1 for b in L2} >>> D {1: 'vimiix', 2: 'vimiix', 3: 'vimiix'}
此處只是一個(gè)生成式的栗子,但并不是理想答案,待學(xué)習(xí)如何生成一一對(duì)應(yīng)的鍵值對(duì)
字典的內(nèi)置方法:
get()
:
獲取鍵所對(duì)應(yīng)的值,如果未找到返回None,找到返回對(duì)應(yīng)的值
pop(key)
:
彈出key對(duì)應(yīng)的值,默認(rèn)最后一個(gè)
popitem()
:
隨機(jī)返回并刪除字典中的一對(duì)鍵和值(項(xiàng))。為什么是隨機(jī)刪除呢?因?yàn)樽值涫菬o(wú)序的,沒(méi)有所謂的“最后一項(xiàng)”或是其它順序。在工作時(shí)如果遇到需要逐一刪除項(xiàng)的工作,用popitem()
方法效率很高。
update()
:
更新或者新增一個(gè)鍵值對(duì)(有則改之無(wú)則加勉)
>>> D.update({'newitem':'update'}) >>> D {'newitem': 'update', 1: 'vimiix', 2: 'vimiix', 3: 'vimiix'}
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
python實(shí)現(xiàn)書(shū)法碑帖圖片分割
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)書(shū)法碑帖圖片分割,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03手機(jī)Python編程軟件QPython支持第三方庫(kù)安裝詳解
這篇文章主要為大家介紹了手機(jī)Python編程軟件QPython的推薦使用,支持第三方庫(kù)安裝,這樣大家在上下班途中也可以來(lái)練練手啦,有需要的朋友一起用起來(lái)吧2021-10-10Python自定義指標(biāo)聚類(lèi)實(shí)例代碼
K-means算法是最為經(jīng)典的基于劃分的聚類(lèi)方法,是十大經(jīng)典數(shù)據(jù)挖掘算法之一,下面這篇文章主要給大家介紹了關(guān)于Python自定義指標(biāo)聚類(lèi)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02Python中多進(jìn)程處理的Process和Pool的用法詳解
在Python編程中,多進(jìn)程是一種強(qiáng)大的并行處理技術(shù),Python提供了兩種主要的多進(jìn)程處理方式:Process和Pool,本文將詳細(xì)介紹這兩種方式的使用,希望對(duì)大家有所幫助2024-02-02Python3 使用pillow庫(kù)生成隨機(jī)驗(yàn)證碼
這篇文章主要介紹了Python3 使用pillow庫(kù)生成隨機(jī)驗(yàn)證碼,需要的朋友可以參考下2019-08-08Python連接達(dá)夢(mèng)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例
本文主要介紹了Python連接達(dá)夢(mèng)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例,dmPython是DM提供的依據(jù)Python DB API version 2.0中API使用規(guī)定而開(kāi)發(fā)的數(shù)據(jù)庫(kù)訪問(wèn)接口,使Python應(yīng)用程序能夠?qū)M數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)2023-12-12Python字節(jié)單位轉(zhuǎn)換(將字節(jié)轉(zhuǎn)換為K M G T)
這篇文章主要介紹了Python字節(jié)單位轉(zhuǎn)換(將字節(jié)轉(zhuǎn)換為K M G T),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03pandas中遍歷dataframe的每一個(gè)元素的實(shí)現(xiàn)
這篇文章主要介紹了pandas中遍歷dataframe的每一個(gè)元素的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10