欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python列表中存放字典遇到的問題及處理

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

列表中存放字典遇到的問題

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

直接使用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直接訪問)。創(chuàng)建一個(gè)數(shù)組時(shí),會(huì)在內(nèi)存中開辟一塊固定長(zhǎng)度的區(qū)域用于直接存儲(chǔ)元素,擴(kuò)容要考慮這塊區(qū)域的后面是否有存儲(chǔ)其他對(duì)象,所以數(shù)組在定義好之后就無法擴(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)存中開辟一塊更大的空間,并將舊列表中存儲(chǔ)的地址復(fù)制到新列表中,舊列表則被銷毀,這樣就實(shí)現(xiàn)了擴(kuò)容。

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

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

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

字典如何存儲(chǔ)?

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

字典本質(zhì)也是一個(gè)數(shù)組,但其索引是鍵經(jīng)過散列函數(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。

字典為什么是無序的?

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

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

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

總結(jié)

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

相關(guān)文章

  • 使用pycharm和pylint檢查python代碼規(guī)范操作

    使用pycharm和pylint檢查python代碼規(guī)范操作

    這篇文章主要介紹了使用pycharm和pylint檢查python代碼規(guī)范操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • VS2022安裝Python開發(fā)環(huán)境的詳細(xì)過程

    VS2022安裝Python開發(fā)環(huán)境的詳細(xì)過程

    這篇文章主要介紹了VS2022安裝Python開發(fā)環(huán)境,文中用Python實(shí)現(xiàn)裴波那契數(shù)列,來感受一下Python的魅力,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Tensorflow分類器項(xiàng)目自定義數(shù)據(jù)讀入的實(shí)現(xiàn)

    Tensorflow分類器項(xiàng)目自定義數(shù)據(jù)讀入的實(shí)現(xiàn)

    這篇文章主要介紹了Tensorflow分類器項(xiàng)目自定義數(shù)據(jù)讀入的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • python如何導(dǎo)入依賴包

    python如何導(dǎo)入依賴包

    在本篇文章里小編給大家整理的是關(guān)于python導(dǎo)入依賴包的方法,需要的朋友們學(xué)習(xí)下。
    2020-07-07
  • python爬蟲用request庫處理cookie的實(shí)例講解

    python爬蟲用request庫處理cookie的實(shí)例講解

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python爬蟲用request庫處理cookie的實(shí)例講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-02-02
  • Django項(xiàng)目中實(shí)現(xiàn)使用qq第三方登錄功能

    Django項(xiàng)目中實(shí)現(xiàn)使用qq第三方登錄功能

    使用qq登錄的前提是已經(jīng)在qq互聯(lián)官網(wǎng)創(chuàng)建網(wǎng)站應(yīng)用并獲取到QQ互聯(lián)中網(wǎng)站應(yīng)用的APP ID和APP KEY。這篇文章主要介紹了Django項(xiàng)目中實(shí)現(xiàn)使用qq第三方登錄功能,需要的朋友可以參考下
    2019-08-08
  • 如何在Python中創(chuàng)建二叉樹

    如何在Python中創(chuàng)建二叉樹

    這篇文章主要介紹了如何在Python中創(chuàng)建二叉樹,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • python淺拷貝與深拷貝使用方法詳解

    python淺拷貝與深拷貝使用方法詳解

    淺拷貝,指的是重新分配一塊內(nèi)存,創(chuàng)建一個(gè)新的對(duì)象,但里面的元素是原對(duì)象中各個(gè)子對(duì)象的引用。深拷貝,是指重新分配一塊內(nèi)存,創(chuàng)建一個(gè)新的對(duì)象,并且將原對(duì)象中的元素,以遞歸的方式,通過創(chuàng)建新的子對(duì)象拷貝到新對(duì)象中。因此,新對(duì)象和原對(duì)象沒有任何關(guān)聯(lián)
    2022-11-11
  • Python實(shí)現(xiàn)獲取內(nèi)網(wǎng)IP地址的方法總結(jié)

    Python實(shí)現(xiàn)獲取內(nèi)網(wǎng)IP地址的方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了五種利用Python語言實(shí)現(xiàn)獲取內(nèi)網(wǎng)IP地址的方法,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以了解一下
    2023-03-03
  • Python實(shí)現(xiàn)從URL地址提取文件名的方法

    Python實(shí)現(xiàn)從URL地址提取文件名的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)從URL地址提取文件名的方法,涉及OS模塊中basename方法的使用技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論