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

關于Python中字典dict的存儲原理詳解

 更新時間:2023年05月19日 11:47:45   作者:遇見糖糖  
Python字典是另一種可變容器模型,可存儲任意類型對象。如字符串、數字、元組等其他容器模型,因為字典是無序的所以不支持索引和切片,需要的朋友可以參考下

字典的定義

字典是"鍵值對"的無序可變序列,字典中的每個元素都是一個"鍵值對",包含:"鍵對象",和"值對象".可以通過"鍵對象"實現快速獲取,刪除,更新對應的"值對象".

列表中我們通過"下標數字"找到對應的對象,字典中通過"鍵對象"找到對應的"值對象"."鍵"是任意的不可變數據,比如:整數,浮點數,字符串,元組.但是:列表,字典,集合這些可變的對象,不能作為"鍵".并且"鍵"不可重復."值"可以是任意的數據,并且可重復.

一個典型的字典的定義方式:

取字典的值

字典的創(chuàng)建:

1.可以使用{},dict()來創(chuàng)建字典對象

a = {}
b = dict(key1=value1,key2=value2)

注:這里面的key不需要帶"引起"直接就可以使用

c = dict([key1,key2],[value1,value2])

2.通過zip()創(chuàng)建字典對象

k = ["name","age","job"]
b = ["tangmoumou","18","student"]
d = dict(zip(k,b))

3.通過fromkeys創(chuàng)建鍵值為空的字典

a = dict.fromkeys('name','age','job'])

字典元素的訪問

為了測試各種訪穩(wěn)方法,先預設一個字典對象:

a = {"name":"唐","age":18,"job":"programmer"}
  • 通過鍵獲取值,若鍵不存在,則拋出異常
  • 通過get()方法獲得 "值",推薦使用

有的時候:返回具體的值,當指定鍵不存在時,返回None;也可以設置指定鍵不存在的時候默認返回的對象.推薦使用get()獲取值對象

設置get的默認返回值

  • 列出所有額鍵值對
a.items()

  • 列出所有鍵,列出所有的值
a.keys()
a.values()

  • len()鍵值對的個數
  • 檢測一個 "鍵"是否在字典中

字典元素添加,修改和刪除

1.給字典新增 鍵值對,如果鍵已經存在,則覆蓋 舊的建制地;如果 鍵不存在,則新增 鍵值對

2.使用update()將字典中所有鍵值對全部添加到舊字典對象上.如果key有重復,則直接覆蓋

3.字典中元素的刪除,可以使用del()方法,或者clear()刪除所有的鍵值對;pop()刪除指定的鍵值對,并返回對應的"值對象"

4.popitem():隨機刪除和返回該鍵值對.字典是"無序可變序列",因此沒有第一個元素,最后一個元素的概念:popitem彈出隨機的項,因此字典并沒有"最后的元素"或者其他有關熟悉怒的概念,若想一個接一個移除并處理項,這個方法就非常有效(因為不用首先獲取鍵的列表)

序列解包

序列解包可用于元組,列表,字典.序列解包可以讓我們方便的對多個變量賦值.

序列解包用于字典時,默認是對"鍵"進行操作;如果需要對鍵值對操作,則需要使用items();如果需要對"值"進行操作,則需要使用values();

s = {"name":"唐某某","age":18,"job":"student"}

字典核心底層原理(重要)

字典對象的核心是散列表.散列表是一個稀疏數組(總是有空白元素的數組),數組的每個單元叫做bucket,每個bucket有兩部分:一個是鍵對象的引用,一個是值對象的引用.

由于,所有bucket結構和大小一致,我么可以通過偏移量來指定bucket.

將一個鍵值對放進字典的底層過程

a={}
a["name"] = "tang"

當將"name"="tang"這個鍵值對放到字典對象a中,首先第一步要計算鍵"name"的散列表.Python可以使用hash()來計算.

由于數組長度為8,我們可以拿計算出的散列值,最右邊3位數作為偏移量,即"010",十進制是數字2,我們查看偏移量2,對應的bucket是否為空,如果為空,則將鍵值放進去,如果不為空,依次取右邊3位作為偏移量'101',十進制是數字5,再查看偏移量5的bucket是否為空.直到棧為空的bucket將鍵值放進去

根據鍵查找"鍵值對"的底層過程

一個鍵值對是如果存儲到數組中的,根據鍵值對象取到值對象,理解起來就簡單了

a.get("name")

當我們調用a.get("name"),就是根據鍵"name"查找"鍵值對",從而找到值"tang"

第一步,我們仍要計算"name"對象的散列值:

bin(hash("name"))

和存儲的底層流程算法一致,也是一次取散列值不同的數字,假設數組長度為8,我們可以拿計算出的散列值的最右邊3位數字作為偏移量,即"010",十進制是數字2,我們查看偏移量5,對應的bucket是否為空.如果為空則返回None.如果不為空,則將這個bucket對象的鍵對象計算對應的散列值,和我們的散列值進行比較,如果相等,則將對應"值對象"返回,如果不相等,則一次取其它幾位數字,重新計算偏移量,依次取完后仍沒有找到哦啊,則返回None.

用法總結:

  • 1.鍵必須可散列
    • 數字,字符串,元組,都是可散列的
    • 自定義對象需要支持下面三點;
    • 支持hash()函數
    • 支持通過__eq__()方法尖刺相等性
    • 做a==b為真,則hash(a)==hash(b)也為真.
  • 2.字典在內存中開銷巨大,典型的空間換時間.
  • 3.鍵值查詢速度很快
  • 4.往字典烈面添加新鍵可能導致擴容,導致散列表中的鍵的次序發(fā)生變化.因此,不要在遍歷字典的同時對字典的修改.

到此這篇關于關于Python中字典dict的存儲原理詳解的文章就介紹到這了,更多相關Python字典存儲原理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python箱型圖繪制與特征值獲取過程解析

    Python箱型圖繪制與特征值獲取過程解析

    這篇文章主要介紹了Python箱型圖繪制與特征值獲取過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Django自定義分頁與bootstrap分頁結合

    Django自定義分頁與bootstrap分頁結合

    這篇文章主要為大家詳細介紹了Django自定義分頁與bootstrap分頁結合使用的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Python集合set()使用的方法詳解

    Python集合set()使用的方法詳解

    這篇文章主要為大家詳細介紹了Python集合set()使用的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • python獲取本機外網ip的方法

    python獲取本機外網ip的方法

    這篇文章主要介紹了python獲取本機外網ip的方法,可實現從外網顯示IP的網站獲取本機IP的功能,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • python subprocess 殺掉全部派生的子進程方法

    python subprocess 殺掉全部派生的子進程方法

    下面小編就為大家?guī)硪黄猵ython subprocess 殺掉全部派生的子進程方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • TensorFlow在MAC環(huán)境下的安裝及環(huán)境搭建

    TensorFlow在MAC環(huán)境下的安裝及環(huán)境搭建

    小編在論壇中看到很多朋友在尋找TensorFlow的環(huán)境搭建圖文步驟以及安裝的具體流程,在此小編給大家整理了一篇非常詳細的圖文流程,希望能夠幫助到你。
    2017-11-11
  • 使用Python初始化多維列表遇到的問題詳解

    使用Python初始化多維列表遇到的問題詳解

    這篇文章主要介紹了使用Python初始化多維列表遇到的問題詳解,二維列表是將其他列表作為它的元素的列表,前一章介紹了如何使用一個列表來存儲線性的元素集合,可以使用列表來存儲二維數據,需要的朋友可以參考下
    2023-11-11
  • pytorch如何對image和label同時進行隨機翻轉

    pytorch如何對image和label同時進行隨機翻轉

    這篇文章主要介紹了pytorch如何對image和label同時進行隨機翻轉問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 利用python繪制蜂群圖的示例代碼

    利用python繪制蜂群圖的示例代碼

    蜂群圖可以不重疊的顯示各數據點的分布,相對于散點圖,所繪制的點彼此靠近且不會重疊,能有效呈現出點分布的局部密度信息,本文給大家介紹了如何利用python繪制蜂群圖,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • django的csrf實現過程詳解

    django的csrf實現過程詳解

    這篇文章主要介紹了django的csrf實現過程相加,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07

最新評論