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

Python字典的概念及常見應(yīng)用實(shí)例詳解

 更新時(shí)間:2019年10月30日 10:12:07   作者:閑魚!!!  
這篇文章主要介紹了Python字典的概念及常見應(yīng)用,結(jié)合實(shí)例形式詳細(xì)的分析了Python字典的概念、原理、創(chuàng)建、常見操作函數(shù)與使用注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python字典的概念及常見應(yīng)用。分享給大家供大家參考,具體如下:

字典的介紹

字典的概念

字典是“鍵值對(duì)”的無序可變序列,字典中的每個(gè)元素都是一個(gè)“鍵值對(duì)”,包含:“鍵
對(duì)象”和“值對(duì)象”??梢酝ㄟ^“鍵對(duì)象”實(shí)現(xiàn)快速獲取、刪除、更新對(duì)應(yīng)的“值對(duì)象”。
列表中我們通過“下標(biāo)數(shù)字”找到對(duì)應(yīng)的對(duì)象。字典中通過“鍵對(duì)象”找到對(duì)應(yīng)的“值
對(duì)象”?!版I”是任意的不可變數(shù)據(jù),比如:整數(shù)、浮點(diǎn)數(shù)、字符串、元組。但是:列表、
字典、集合這些可變對(duì)象,不能作為“鍵”。并且“鍵”不可重復(fù)。
“值”可以是任意的數(shù)據(jù),并且可重復(fù)。
一個(gè)典型的字典的定義方式:

a = {'name':'gaoqi','age':18,'job':'programmer'}

字典的創(chuàng)建

1. 我們可以通過{}、dict()來創(chuàng)建字典對(duì)象。

>>> a = {'name':'gaoqi','age':18,'job':'programmer'}
>>> b = dict(name='gaoqi',age=18,job='programmer')
>>> a = dict([("name","gaoqi"),("age",18)])
>>> c = {} #空的字典對(duì)象
>>> d = dict() #空的字典對(duì)象

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

>>> k = ['name','age','job']
>>> v = ['gaoqi',18,'techer']
>>> d = dict(zip(k,v))
>>> d
{'name': 'gaoqi', 'age': 18, 'job': 'techer'}

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

>>> a = dict.fromkeys(['name','age','job'])
>>> a
{'name': None, 'age': None, 'job': None}

字典元素的訪問

為了測(cè)試各種訪問方法,我們這里設(shè)定一個(gè)字典對(duì)象:

a = {'name':'gaoqi','age':18,'job':'programmer'}

1. 通過 [鍵] 獲得“值”。若鍵不存在,則拋出異常。

>>> a = {'name':'gaoqi','age':18,'job':'programmer'}
>>> a['name']
'gaoqi'
>>> a['age']
18
>>> a['sex']
Traceback (most recent call last):
File "<pyshell#374>", line 1, in <module>
a['sex']
KeyError: 'sex'

2. 通過 get()方法獲得“值”。推薦使用。優(yōu)點(diǎn)是:指定鍵不存在,返回 None;也可以設(shè)

定指定鍵不存在時(shí)默認(rèn)返回的對(duì)象。推薦使用 get()獲取“值對(duì)象”。

>>> a.get('name')
'gaoqi'
>>> a.get('sex')
>>> a.get('sex','一個(gè)男人')
'一個(gè)男人'

3. 列出所有的鍵值對(duì)

>>> a.items()
dict_items([('name', 'gaoqi'), ('age', 18), ('job', 'programmer')])

4. 列出所有的鍵,列出所有的值

>>> a.keys()
dict_keys(['name', 'age', 'job'])
>>> a.values()
dict_values(['gaoqi', 18, 'programmer'])

5. len() 鍵值對(duì)的個(gè)數(shù)

6. 檢測(cè)一個(gè)“鍵”是否在字典中

>>> a = {"name":"gaoqi","age":18}
>>> "name" in a
True

字典元素添加、修改、刪除

1. 給字典新增“鍵值對(duì)”

如果“鍵”已經(jīng)存在,則覆蓋舊的鍵值對(duì);如果“鍵”不存在,則新增“鍵值對(duì)”。

>>>a = {'name':'gaoqi','age':18,'job':'programmer'}
>>> a['address']='西三旗 1 號(hào)院'
>>> a['age']=16
>>> a
{'name': 'gaoqi', 'age': 16, 'job': 'programmer', 'address': '西三旗 1 號(hào)院'}

2. 使用 update()

將新字典中所有鍵值對(duì)全部添加到舊字典對(duì)象上。如果 key 有重復(fù),則直接覆蓋。

>>> a = {'name':'gaoqi','age':18,'job':'programmer'}
>>> b = {'name':'gaoxixi','money':1000,'sex':'男的'}
>>> a.update(b)
>>> a
{'name': 'gaoxixi', 'age': 18, 'job': 'programmer', 'money': 1000, 'sex': '男的'}

3. 字典中元素的刪除

可以使用 del()方法;或者 clear()刪除所有鍵值對(duì);pop()刪除指定鍵值對(duì),并返回對(duì)應(yīng)的“值對(duì)象”;

>>> a = {'name':'gaoqi','age':18,'job':'programmer'}
>>> del(a['name'])
>>> a
{'age': 18, 'job': 'programmer'}
>>> b = a.pop('age')
>>> b
18

4. popitem()

隨機(jī)刪除和返回該鍵值對(duì)。字典是“無序可變序列”,因此沒有第一個(gè)元
素、最后一個(gè)元素的概念;popitem 彈出隨機(jī)的項(xiàng),因?yàn)樽值洳]有"最后的元素"或者其
他有關(guān)順序的概念。若想一個(gè)接一個(gè)地移除并處理項(xiàng),這個(gè)方法就非常有效(因?yàn)椴挥檬紫?br /> 獲取鍵的列表)。

>>> a = {'name':'gaoqi','age':18,'job':'programmer'}
>>> a.popitem()
('job', 'programmer')
>>> a
{'name': 'gaoqi', 'age': 18}
>>> a.popitem()
('age', 18)
>>> a
{'name': 'gaoqi'}

序列解包

序列解包可以用于元組、列表、字典。

序列解包可以讓我們方便的對(duì)多個(gè)變量賦值。

>>> x,y,z=(20,30,10)
>>> x
20
>>> y
30
>>> z
10
>>> (a,b,c)=(9,8,10)
>>> a
9
>>> [a,b,c]=[10,20,30]
>>> a
10
>>> b
20

序列解包用于字典時(shí)

默認(rèn)是對(duì)“鍵”進(jìn)行操作; 如果需要對(duì)鍵值對(duì)操作,則需要使用items();如果需要對(duì)“值”進(jìn)行操作,則需要使用 values();

>>> s = {'name':'gaoqi','age':18,'job':'teacher'}
>>> name,age,job=s #默認(rèn)對(duì)鍵進(jìn)行操作
>>> name
'name'
>>> name,age,job=s.items() #對(duì)鍵值對(duì)進(jìn)行操作
>>> name
('name', 'gaoqi')
>>> name,age,job=s.values() #對(duì)值進(jìn)行操作
>>> name
'gaoqi'

表格數(shù)據(jù)使用字典和列表存儲(chǔ),并實(shí)現(xiàn)訪問

姓名 年齡 薪資 城市
高小一 18 30000 北京
高小二 19 20000 上海
高小五 20 10000 深圳

源代碼(mypy_09.py):

r1 = {"name":"高小一","age":18,"salary":30000,"city":"北京"}
r2 = {"name":"高小二","age":19,"salary":20000,"city":"上海"}
r3 = {"name":"高小五","age":20,"salary":10000,"city":"深圳"}
tb = [r1,r2,r3]
#獲得第二行的人的薪資
print(tb[1].get("salary"))
#打印表中所有的的薪資
for i in range(len(tb)): # i -->0,1,2
print(tb[i].get("salary"))
#打印表的所有數(shù)據(jù)
for i in range(len(tb)):
print(tb[i].get("name"),tb[i].get("age"),tb[i].get("salary"),tb[i].get("city"))

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

字典對(duì)象的核心是散列表。散列表是一個(gè)稀疏數(shù)組(總是有空白元素的數(shù)組),數(shù)組的
每個(gè)單元叫做 bucket。每個(gè) bucket 有兩部分:一個(gè)是鍵對(duì)象的引用,一個(gè)是值對(duì)象的引
用。
由于,所有 bucket 結(jié)構(gòu)和大小一致,我們可以通過偏移量來讀取指定 bucket。
在這里插入圖片描述

將一個(gè)鍵值對(duì)放進(jìn)字典的底層過程

>>> a = {}
>>>
a["name"]="gaoqi"

假設(shè)字典 a 對(duì)象創(chuàng)建完后,數(shù)組長度為 8:
在這里插入圖片描述
我們要把”name”=”gaoqi”這個(gè)鍵值對(duì)放到字典對(duì)象 a 中,首先第一步需要計(jì)算
鍵”name”的散列值。Python 中可以通過 hash()來計(jì)算。

>>> bin(hash("name"))
'-0b1010111101001110110101100100101'

由于數(shù)組長度為 8,我們可以拿計(jì)算出的散列值的最右邊 3 位數(shù)字作為偏移量,即
“101”,十進(jìn)制是數(shù)字 5。我們查看偏移量 5,對(duì)應(yīng)的 bucket 是否為空。如果為空,則
將鍵值對(duì)放進(jìn)去。如果不為空,則依次取右邊 3 位作為偏移量,即“100”,十進(jìn)制是數(shù)字
4。再查看偏移量為 4 的 bucket 是否為空。直到找到為空的 bucket 將鍵值對(duì)放進(jìn)去。流
程圖如下:

在這里插入圖片描述

擴(kuò)容

python 會(huì)根據(jù)散列表的擁擠程度擴(kuò)容。“擴(kuò)容”指的是:創(chuàng)造更大的數(shù)組,將原有內(nèi)容
拷貝到新數(shù)組中。
接近 2/3 時(shí),數(shù)組就會(huì)擴(kuò)容。

根據(jù)鍵查找“鍵值對(duì)”的底層過程

我們明白了,一個(gè)鍵值對(duì)是如何存儲(chǔ)到數(shù)組中的,根據(jù)鍵對(duì)象取到值對(duì)象,理解起來就
簡(jiǎn)單了。

>>> a.get("name")
'gaoqi'

當(dāng)我們調(diào)用 a.get(“name”),就是根據(jù)鍵“name”查找到“鍵值對(duì)”,從而找到值
對(duì)象“gaoqi”。
第一步,我們?nèi)匀灰?jì)算“name”對(duì)象的散列值:

>>> bin(hash("name"))
'-0b1010111101001110110101100100101'

和存儲(chǔ)的底層流程算法一致,也是依次取散列值的不同位置的數(shù)字。 假設(shè)數(shù)組長度為
8,我們可以拿計(jì)算出的散列值的最右邊 3 位數(shù)字作為偏移量,即“101”,十進(jìn)制是數(shù)字
5。我們查看偏移量 5,對(duì)應(yīng)的 bucket 是否為空。如果為空,則返回 None。如果不為空,
則將這個(gè) bucket 的鍵對(duì)象計(jì)算對(duì)應(yīng)散列值,和我們的散列值進(jìn)行比較,如果相等。則將對(duì)
應(yīng)“值對(duì)象”返回。如果不相等,則再依次取其他幾位數(shù)字,重新計(jì)算偏移量。依次取完后,
仍然沒有找到。則返回 None。流程圖如下:
在這里插入圖片描述

用法總結(jié):

  1. 鍵必須可散列
    (1) 數(shù)字、字符串、元組,都是可散列的。
    (2) 自定義對(duì)象需要支持下面三點(diǎn):
    • 支持 hash()函數(shù)
    • 支持通過__eq__()方法檢測(cè)相等性。
    • 若 a==b 為真,則 hash(a)==hash(b)也為真。
  2. 字典在內(nèi)存中開銷巨大,典型的空間換時(shí)間。
  3. 鍵查詢速度很快
  4. 往字典里面添加新建可能導(dǎo)致擴(kuò)容,導(dǎo)致散列表中鍵的次序變化。因此,不要在遍歷字典的同時(shí)進(jìn)行字典的修改。

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python字典操作技巧匯總》、《Python列表(list)操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • MATLAB 全景圖切割及盒圖顯示的實(shí)現(xiàn)步驟

    MATLAB 全景圖切割及盒圖顯示的實(shí)現(xiàn)步驟

    本文給大家分兩部分介紹,第一部分通過圖文的形式給大家介紹了全景圖切割的代碼,第二部分給大家介紹了盒圖展示效果的實(shí)現(xiàn)代碼,對(duì)MATLAB 全景圖切割相關(guān)知識(shí)感興趣的朋友,跟隨小編一起看看吧
    2021-05-05
  • pandas初學(xué)者容易犯的六個(gè)錯(cuò)誤總結(jié)

    pandas初學(xué)者容易犯的六個(gè)錯(cuò)誤總結(jié)

    Pandas是Python的一個(gè)數(shù)據(jù)分析包,該工具為解決數(shù)據(jù)分析任務(wù)而創(chuàng)建,Pandas納入大量庫和標(biāo)準(zhǔn)數(shù)據(jù)模型,提供高效的操作數(shù)據(jù)集所需的工具,這篇文章主要給大家介紹了總結(jié)介紹了pandas初學(xué)者容易犯的六個(gè)錯(cuò)誤,需要的朋友可以參考下
    2021-10-10
  • 超詳細(xì)注釋之OpenCV按位AND OR XOR和NOT

    超詳細(xì)注釋之OpenCV按位AND OR XOR和NOT

    這篇文章主要介紹了OpenCV按位AND OR XOR和NOT運(yùn)算,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 在Django下創(chuàng)建項(xiàng)目以及設(shè)置settings.py教程

    在Django下創(chuàng)建項(xiàng)目以及設(shè)置settings.py教程

    今天小編就為大家分享一篇在Django下創(chuàng)建項(xiàng)目以及設(shè)置settings.py教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Django正則URL匹配實(shí)現(xiàn)流程解析

    Django正則URL匹配實(shí)現(xiàn)流程解析

    這篇文章主要介紹了Django正則URL匹配實(shí)現(xiàn)流程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 使用Python中Tkinter模塊的Treeview?組件顯示ini文件操作

    使用Python中Tkinter模塊的Treeview?組件顯示ini文件操作

    這篇文章主要介紹了使用Python中Tkinter模塊的Treeview組件顯示ini文件操作,Treeview組件位于ttk模塊,該模塊自Tk8.5開始引入,主題詳細(xì)介紹,需要的朋友可以參考一下
    2022-09-09
  • python用Pygal如何生成漂亮的SVG圖像詳解

    python用Pygal如何生成漂亮的SVG圖像詳解

    本篇文章講述python如何用 Pygal 來生成漂亮的 SVG 圖表,并能夠利用 Python 中的 Flask 框架來顯示你的 SVG 圖像,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • 五個(gè)提升Python的執(zhí)行效率的技巧分享

    五個(gè)提升Python的執(zhí)行效率的技巧分享

    python作為使用最廣泛的編程語言之一,有著無窮無盡的第三方非標(biāo)準(zhǔn)庫的支持。但python有一個(gè)經(jīng)常被人詬病的缺點(diǎn)那就是運(yùn)行速度,所以本文和大家分享了五個(gè)提升Python的執(zhí)行效率的技巧,希望對(duì)大家有所幫助
    2023-04-04
  • python GUI實(shí)現(xiàn)小球滿屏亂跑效果

    python GUI實(shí)現(xiàn)小球滿屏亂跑效果

    這篇文章主要為大家詳細(xì)介紹了python GUI實(shí)現(xiàn)小球滿屏亂跑效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Python實(shí)現(xiàn)圖片批量加入水印代碼實(shí)例

    Python實(shí)現(xiàn)圖片批量加入水印代碼實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)圖片批量加入水印代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

巍山| 额尔古纳市| 沁水县| 岳池县| 阿拉善左旗| 宾阳县| 东兴市| 广丰县| 和顺县| 天峨县| 石楼县| 元谋县| 班玛县| 佛山市| 九寨沟县| 若羌县| 荆门市| 思南县| 东乡| 凉城县| 额尔古纳市| 济宁市| 盐山县| 上饶县| 兴化市| 新乐市| 天镇县| 镇雄县| 仁怀市| 孝感市| 嘉义市| 来安县| 南木林县| 平顶山市| 江源县| 沅江市| 阿巴嘎旗| 洪湖市| 石柱| 莱西市| 民勤县|