最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python列表中存放字典遇到的問(wèn)題及處理

 更新時(shí)間:2024年02月24日 10:39:56   作者:小黃鴨and小黑鴨  
這篇文章主要介紹了Python列表中存放字典遇到的問(wèn)題及處理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

列表中存放字典遇到的問(wèn)題

使用列表、字典之間的相互嵌套可以很容易的實(shí)現(xiàn)json數(shù)據(jù)格式,但是昨天在往列表中裝入字典時(shí)遇到了問(wèn)題:

直接使用append方法將字典添加到列表中,如果需要更改字典中的數(shù)據(jù),那么列表中的內(nèi)容也會(huì)發(fā)生改變,這是因?yàn)閐ict在Python里是object,不屬于primitive type(即int、float、string、None、bool)。

這意味著你一般操控的是一個(gè)指向object(對(duì)象)的指針,而非object本身。

下面是改善方法:使用copy()

列表和字典的存儲(chǔ)方式

數(shù)組如何存儲(chǔ)?

數(shù)組底層的存儲(chǔ)結(jié)構(gòu)是順序存儲(chǔ)結(jié)構(gòu),這樣的結(jié)構(gòu)有這樣一些優(yōu)點(diǎn):邏輯上相鄰的節(jié)點(diǎn)在物理位置上也是相鄰的,可以節(jié)省空間,并且可以實(shí)現(xiàn)隨機(jī)存?。ㄒ卜Q直接訪問(wèn))。創(chuàng)建一個(gè)數(shù)組時(shí),會(huì)在內(nèi)存中開(kāi)辟一塊固定長(zhǎng)度的區(qū)域用于直接存儲(chǔ)元素,擴(kuò)容要考慮這塊區(qū)域的后面是否有存儲(chǔ)其他對(duì)象,所以數(shù)組在定義好之后就無(wú)法擴(kuò)容了。而且在查詢時(shí),是根據(jù)索引和元素存儲(chǔ)大小去計(jì)算地址偏移量的,如果元素類型不一致,所占內(nèi)存空間不相同,就不能實(shí)現(xiàn)隨機(jī)存儲(chǔ),所以數(shù)組不能同時(shí)存儲(chǔ)不同類型的數(shù)據(jù);

列表如何存儲(chǔ)?

列表本質(zhì)是動(dòng)態(tài)的數(shù)組列表存儲(chǔ)的是每個(gè)元素在內(nèi)存中的地址(即引用),當(dāng)列表中空白占位低于1/3時(shí),會(huì)在內(nèi)存中開(kāi)辟一塊更大的空間,并將舊列表中存儲(chǔ)的地址復(fù)制到新列表中,舊列表則被銷毀,這樣就實(shí)現(xiàn)了擴(kuò)容。

因?yàn)榱斜泶鎯?chǔ)的是元素的引用這個(gè)特性,而引用所占的內(nèi)存空間是相同的,這樣便可以同時(shí)存放不同類型的數(shù)據(jù)了。

Python中的列表與數(shù)組的區(qū)別在于:

  • 數(shù)組定義好之后就無(wú)法擴(kuò)容了,而列表在定義好之后可以擴(kuò)容;
  • 數(shù)組只能同時(shí)存儲(chǔ)一種類型的數(shù)據(jù),而列表可以同時(shí)存儲(chǔ)不同類型的數(shù)據(jù)。

字典如何存儲(chǔ)?

Python中的字典底層是通過(guò)散列表(哈希表)來(lái)實(shí)現(xiàn)的, “哈希表是根據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪問(wèn)的數(shù)據(jù)結(jié)構(gòu)。也就是說(shuō),它通過(guò)把關(guān)鍵碼值映射到表中一個(gè)位置來(lái)訪問(wèn)記錄,以加快查找的速度。這個(gè)映射函數(shù)叫做散列函數(shù),存放記錄的數(shù)組叫做散列表。”

字典本質(zhì)也是一個(gè)數(shù)組,但其索引是鍵經(jīng)過(guò)散列函數(shù)處理后得到的散列值,散列函數(shù)的目的是使鍵均勻地分布在散列表中,并且可以在內(nèi)存中以O(shè)(1)的時(shí)間復(fù)雜度進(jìn)行尋址,從而實(shí)現(xiàn)快速查找和修改。散列表其實(shí)是一個(gè)稀疏數(shù)組(總是有空白元素的數(shù)組稱為稀疏數(shù)組),散列表里的單元通常叫作表元。在字典的散列表當(dāng)中,每個(gè)鍵值對(duì)都占用一個(gè)表元,每個(gè)表元都有兩個(gè)部分,一個(gè)是對(duì)鍵的引用,另一個(gè)是對(duì)值的引用。散列表中散列函數(shù)的設(shè)計(jì)困難在于將數(shù)據(jù)均勻分布在散列表中,從而盡量減少散列碰撞和沖突。

字典如何添加和查詢?

添加:Python 調(diào)用內(nèi)部的散列函數(shù),將鍵(Key)作為參數(shù)進(jìn)行轉(zhuǎn)換,得到一個(gè)唯一的地址(這也就解釋了為什么給相同的鍵賦值會(huì)直接覆蓋的原因,因?yàn)橄嗤逆I轉(zhuǎn)換后的地址是一樣的),然后將值(Value)存放到該地址中。

查詢:使用散列函數(shù)將key轉(zhuǎn)換為數(shù)組的下標(biāo),并定位到數(shù)組對(duì)應(yīng)位置獲取value。

字典為什么是無(wú)序的?

1.鍵值的哈希碰撞,hash(key1) == hash(key2)時(shí),向字典里連續(xù)添加的這個(gè)兩個(gè)鍵的順序是不可以控制的,也是無(wú)法做到連續(xù)的,后來(lái)的鍵會(huì)按算法調(diào)整到其它位置。

序是不可以控制的,也是無(wú)法做到連續(xù)的,后來(lái)的鍵會(huì)按算法調(diào)整到其它位置。

2.字典空間擴(kuò)容,當(dāng)鍵的數(shù)量超過(guò)字典默認(rèn)開(kāi)的空間時(shí),字典會(huì)做空間擴(kuò)容,擴(kuò)容后的鍵順和創(chuàng)建順序就會(huì)發(fā)生變化,不受人為控制。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

皮山县| 扎赉特旗| 峨边| 潞西市| 茶陵县| 寻甸| 安西县| 罗城| 黎平县| 科技| 禄劝| 公安县| 兴业县| 兖州市| 临泉县| 临城县| 什邡市| 绩溪县| 香港 | 永福县| 汉寿县| 靖宇县| 措美县| 铜梁县| 临安市| 迭部县| 鞍山市| 景德镇市| 南康市| 桓仁| 舒兰市| 潼南县| 咸阳市| 漯河市| 凤凰县| 鄯善县| 顺平县| 泰兴市| 昆山市| 敖汉旗| 镇江市|