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

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

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

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

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

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

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

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

列表和字典的存儲方式

數(shù)組如何存儲?

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

列表如何存儲?

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

因為列表存儲的是元素的引用這個特性,而引用所占的內(nèi)存空間是相同的,這樣便可以同時存放不同類型的數(shù)據(jù)了。

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

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

字典如何存儲?

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

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

字典如何添加和查詢?

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

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

字典為什么是無序的?

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

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

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

總結(jié)

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

相關(guān)文章

  • python的tkinter、socket庫開發(fā)tcp的客戶端和服務(wù)端詳解

    python的tkinter、socket庫開發(fā)tcp的客戶端和服務(wù)端詳解

    本文介紹了TCP通訊流程和開發(fā)步驟,包括客戶端和服務(wù)端的實現(xiàn),客戶端使用Python的tkinter庫實現(xiàn)圖形化界面,服務(wù)端使用socket庫監(jiān)聽連接并處理消息,文章還提供了客戶端和服務(wù)端的代碼示例
    2025-01-01
  • django正續(xù)或者倒序查庫實例

    django正續(xù)或者倒序查庫實例

    這篇文章主要介紹了django正續(xù)或者倒序查庫實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python使用os.path和pathlib模塊進(jìn)行文件路徑操作的詳細(xì)教程

    Python使用os.path和pathlib模塊進(jìn)行文件路徑操作的詳細(xì)教程

    文件路徑操作是Python編程中的重要功能,它允許程序處理文件和目錄的路徑,這篇文章主要介紹了Python使用os.path和pathlib模塊進(jìn)行文件路徑操作的詳細(xì)步驟,有需要的小伙伴可以了解下
    2026-03-03
  • Python執(zhí)行速度慢的原因及全面優(yōu)化方案

    Python執(zhí)行速度慢的原因及全面優(yōu)化方案

    Python 作為解釋型語言確實存在一些性能瓶頸,但通過深入理解其底層機(jī)制并采取合適的優(yōu)化策略,可以顯著提升執(zhí)行效率,以下是系統(tǒng)的原因分析和優(yōu)化方法,需要的朋友可以參考下
    2025-07-07
  • python爬蟲框架scrapy實現(xiàn)模擬登錄操作示例

    python爬蟲框架scrapy實現(xiàn)模擬登錄操作示例

    這篇文章主要介紹了python爬蟲框架scrapy實現(xiàn)模擬登錄操作,結(jié)合實例形式分析了scrapy框架實現(xiàn)模擬登陸操作的步驟、相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2018-08-08
  • PyQt中使用QProcess運(yùn)行一個進(jìn)程的示例代碼

    PyQt中使用QProcess運(yùn)行一個進(jìn)程的示例代碼

    這篇文章主要介紹了在PyQt中使用QProcess運(yùn)行一個進(jìn)程,本例中通過按下按鈕,啟動了windows系統(tǒng)自帶的記事本程序,即notepad.exe, 因為它在windows的系統(tǒng)目錄下,該目錄已經(jīng)加在了系統(tǒng)的PATH環(huán)境變量中,所以不需要特別指定路徑,需要的朋友可以參考下
    2022-12-12
  • python求crc32值的方法

    python求crc32值的方法

    這篇文章主要介紹了python求crc32值的方法,包括相關(guān)的步驟及實現(xiàn)方法,需要的朋友可以參考下
    2014-10-10
  • Python的Django框架中的表單處理示例

    Python的Django框架中的表單處理示例

    這篇文章主要介紹了Python的Django框架中的表單處理示例,表單處理是Django中的基礎(chǔ)操作,需要的朋友可以參考下
    2015-07-07
  • python基于openpyxl生成excel文件

    python基于openpyxl生成excel文件

    這篇文章主要介紹了python基于openpyxl生成excel文件的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 在Linux中通過Python腳本訪問mdb數(shù)據(jù)庫的方法

    在Linux中通過Python腳本訪問mdb數(shù)據(jù)庫的方法

    這篇文章主要介紹了在Linux中通過Python腳本訪問mdb數(shù)據(jù)庫的方法,本文示例基于debian系的Linux系統(tǒng),需要的朋友可以參考下
    2015-05-05

最新評論

武定县| 易门县| 盐城市| 长寿区| 秦安县| 蒙阴县| 会理县| 高阳县| 安庆市| 黔东| 东莞市| 三门县| 揭西县| 宝丰县| 永川市| 沅陵县| 浏阳市| 临武县| 安仁县| 唐海县| 凌海市| 丰镇市| 津南区| 黔东| 泰安市| 无为县| 运城市| 保定市| 扎赉特旗| 呼玛县| 涞水县| 漳浦县| 台安县| 张家界市| 台北市| 泾源县| 邻水| 闽清县| 墨玉县| 昌黎县| 泊头市|