Python 内置容器 之 字典 ( dict )超详细指南
python 的內(nèi)置容器? :? ? 有四個(gè)?
? ? ? ? ? ? ? ?? ? ?
?????????????????????list?(列表)? ?? ? ?set?(集合)??? ? ??tuple? ?(元祖)?? ? ? ?dict??(字典)
Dict? :字典?? ( )
? ? ? ? ?#? ?他本質(zhì)其實(shí)也是一種 哈希表 (包裝的? 鍵值對(duì)!!)
? ? ? ? ?#? ? 一個(gè)鍵 對(duì)應(yīng)著一個(gè) 值 , 鍵與鍵 是不能沖突的(就是不能有兩個(gè)一模一樣的鍵)
? ? ? ? ? ? ? ?值 是可以重復(fù)的。
? ? ? ? ?#? ?在 Python 中, 鍵( Key ) 的數(shù)據(jù)類型 一般就是 數(shù)字 字符串 和元祖 ,大多數(shù)情況下
? ? ? ? ? ? ? 鍵的數(shù)據(jù)類型 為 字符串 !!? 鍵必須是不可變的!!
? ? ? ? ? ? ? ?值 可以是任意 數(shù)據(jù)類型!!
? 創(chuàng)建? :??
? ? ? ? ? ?#?? ?我們?cè)谇懊?學(xué)習(xí) 集合的時(shí)候,就說過,集合 和 字典 都是 以 { } 的形式呈現(xiàn)的!!
? ? ? ? ? ??
? ? ? ? ? ? 示例? :? ?
d = { } >>> type(d) <class 'dict'>z = { "name" : "太極", 5:"是整數(shù)",(0.3,0.2,0.1):"是小數(shù)"} >>> type(z) <class 'dict'>? ? ? ? ? ? ? 上示就是證明 :? 字典中? 鍵? 的數(shù)據(jù)類型 !!??
? ? ? ? ? ? #?? ? ? zip 方式 創(chuàng)建字典? ? dict(zip( ))
u2 = dict(zip('abc',[1,2,3])) >>> u2 {'a': 1, 'b': 2, 'c': 3}? ? ? ? ? ? ? ? ? 注意上示中? ? 'abc'? ?: 是 a , b,? c? 各自成為一個(gè)? 鍵??
name = ['李晨', '劉勇', '趙雪', "王峰"] grade = ['89', '92', '76', '65'] dict_1 = dict(zip(name, grade)){'李晨': '89', '劉勇': '92', '趙雪': '76', '王峰': '65'}? ? ? ? ? ??
? 訪問? :
? ? ? ? ? ? ? ? #? ?字典的訪問 是通過? ?鍵 來訪問 值? 的 !
? ? ? ? ? ? ? ? 示例? :? ?第一種 訪問 方式??
z["name"] '太極' >>> z[5] '是整數(shù)' >>> z[(0.3,0.2,0.1)] '是小數(shù)'? ? ? ? ? ? ? ? 示例? :? ? 通過? ?get? ?訪問??
z.get("name") '太極'z.get(5) '是整數(shù)'? ? ? ? ? ? ? ?get? 的第二種 訪問 方式 :
z {'name': '太極', 5: '是整數(shù)', (0.3, 0.2, 0.1): '是小數(shù)'}z.get("法外狂徒","張三") '張三'z {'name': '太極', 5: '是整數(shù)', (0.3, 0.2, 0.1): '是小數(shù)'}? ? ? ? ? ? ?注? :? get 的第二種訪問方式 不經(jīng)常用,但是也要知道這種用法?
? ? ? ? ? ? ? ? ? ? #???可以看到 第二行的 get 新用法 , 在第一行代碼 我們已經(jīng)說明了 字典 z 里的具體
? ? ? ? ? ? ? ? ? ? ? ? ? 內(nèi)容,然后,我們執(zhí)行 第二行代碼, 可以發(fā)現(xiàn) z 字典里 就沒有 “ 法外狂徒 ” 和?
? ? ? ? ? ? ? ? ? ? ? ? ? “張三”? 的內(nèi)容呀 !!!
? ? ? ? ? ? ? ? ? ? ? ? ? 而 我們執(zhí)行完 第二行代碼 給我們 返回來一個(gè) “ 張三 ”
? ? ? ? ? ? ? ? ? ? ? ? ? 所以, get 的第二種用法就是 當(dāng) 字典中 沒有 要訪問的 鍵 的時(shí)候("法外狂徒") 會(huì)
??????????????????????????默認(rèn)將 ( " 法外狂徒 ", " 張三 ") 作為一對(duì) 鍵值對(duì) 進(jìn)行訪問 !!
? ? ? ? ? ? ? ? ? ? ? ? ? 就相當(dāng)于是? 鍵 : 法外狂徒? ? 值 : 張三? ?
? ? ? ? ? ? ? ? ? ? ? ? ? 但是在執(zhí)行完 第二行代碼后 再 看 字典 z? 的內(nèi)容 還是原來的樣子 ,就說明? :
? ? ? ? ? ? ? ? ? ? ? ? ? get? 的第二種? 用法 不會(huì) 改變 字典 的內(nèi)容!!!?
? ? ? ? ? ? ? ? ? ? #? ? 倘若,法外狂徒 后面 沒有張三 ,即 字典中 就沒有這個(gè) 鍵 ,直接 返回 None !?
?增刪改? :?
? ? ? ? ? ? ? ? ? ? #? 我們知道? 不能對(duì) 鍵 做改動(dòng),可以對(duì) 值 做改動(dòng)?
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? 增? :?
z["gender"]="男" >>> z {'name': '太極', 5: '是整數(shù)', (0.3, 0.2, 0.1): '是小數(shù)', 'gender': '男'}? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? 刪? :?
del z['name'] >>> z {5: '是整數(shù)', (0.3, 0.2, 0.1): '是小數(shù)', 'gender': '男'}? ? ? ? ? ? ? ? ? ? 我們使用的是? del??
? ? ? ? ? ? ? ? ? ? 改? :??
? ? ? ? ? ? ? ? ? ? ? ? ? ? 由于 我們字典中? 鍵 是不能變的,所以 只能對(duì) 值 做以 改變?
z['gender']='女' >>> z {5: '是整數(shù)', (0.3, 0.2, 0.1): '是小數(shù)', 'gender': '女'}????常見方法? :?
????????????????????????? 'clear',? ? ? ?'copy',? ? ? ? ? ? ? 'fromkeys',? ? ? ? ? ?'get',? ? ? ?
??????????????????????????'pop',? ? ? ?'popitem',? ? ? ? ? 'setdefault',? ? ? ?'update',? ?
???????????????????????? 'items',? ? ? ? ? 'keys',? ? ? ? ? ? ? 'values'
? ? ? ? ? ? ? ? ? ? ? ? ??keys?
u1 {'球隊(duì)名': '邁阿密', '球員名': 'james', '球衣號(hào)碼': 6} >>> u1.keys() dict_keys(['球隊(duì)名', '球員名', '球衣號(hào)碼'])? ? ? ? ? ? ? ? ? ? ? ? #? 以列表的形式返回字典中所有的? “ 鍵 ”
? ? ? ? ? ? ? ? ? ? ? ? values
u1 {'球隊(duì)名': '熱火隊(duì)', '球員名': 'james', '號(hào)碼': 6} >>> u1.values() dict_values(['熱火隊(duì)', 'james', 6])? ? ? ? ? ? ? ? ? ? ? ? ?#? ?以列表的形式返回字典中所有的? ?“ 值 ”?
? ? ? ? ? ? ? ? ? ? ? ?items
u1.items() dict_items([('球隊(duì)名', '熱火隊(duì)'), ('球員名', 'james'), ('號(hào)碼', 6)])? ? ? ? ? ? ? ? ? ? ? ? #? ?返回一個(gè)列表,列表中以元組的形式把字典中的每一對(duì)鍵值對(duì)取出?
? ? ? ? ? ? ? ? ? ? ? ? get
u1.get('球員名') 'james'? ? ? ? ? ? ? ? ? ? ? ? #? ?通過 鍵 獲取 值?
? ? ? ? ? ? ? ? ? ? ?? pop
u1.pop('球隊(duì)名') '熱火隊(duì)' >>> u1 {'球員名': 'james', '號(hào)碼': 6}? ? ? ? ? ? ? ? ? ? ? ?#? ?通過 鍵 刪除 鍵值對(duì)??
? ? ? ? ? ? ? ? ? ? ? ? popitem?
u1['年齡'] = 23 >>> u1 {'球員名': 'james', '號(hào)碼': 6, '年齡': 23} >>> u1.popitem() ('年齡', 23) >>> u1 {'球員名': 'james', '號(hào)碼': 6} >>> u1.popitem() ('號(hào)碼', 6) >>> u1.popitem() ('球員名', 'james') >>> u1 {}? ? ? ? ? ? ? ? ? ?#? ?不帶參數(shù),是用來刪除鍵值對(duì),先刪最后創(chuàng)建的鍵值對(duì)!!
字典的遍歷? :??
? ? ? ? NO : 1? ?? ?? ?for? key? in? 字典對(duì)象?
for key in u1 : ... print(key) ... 球隊(duì)名 球員名 號(hào)碼for key in u1 : ... print(key,u1[key]) ... 球隊(duì)名 熱火隊(duì) 球員名 james 號(hào)碼 6? ? ? ? ?#? 上部分是? 返回鍵? ? ? ? ? ? 下部分 : 直接返回? ?鍵值對(duì)? ? ? ??
????????
? ? ? ? NO :2? ? ? ? for? ? (key,value)? ? in? ?字典對(duì)象.items()
for(key,values) in u1.items(): ... print(key,values) ... 球隊(duì)名 熱火隊(duì) 球員名 james 號(hào)碼 6? ? ? ? ?NO : 3? ? ? ? for? item? ?in? ?字典對(duì)象.items()
for items in u1.items(): ... print(items) ... ('球隊(duì)名', '熱火隊(duì)') ('球員名', 'james') ('號(hào)碼', 6)至此,我們? Python? ?中四個(gè) 內(nèi)置容器已經(jīng)全部介紹完了!!
注意? : 當(dāng)不可變的數(shù)據(jù)類型,如果包含了可變對(duì)象,那么可變對(duì)象這部分是可以變化的!!
? ? ? ? ? ? ??
? ? ? ? ? ? ? #? ?我們學(xué)習(xí)了 四大容器? 列表? 字典 元組? 集合 ,其中,有的數(shù)據(jù)類型是可變的,有的是
? ? ? ? ? ? ? ? ? ?不可變的,我們?cè)趯?shí)踐過程中也要注意 綜合來使用會(huì)更加靈活!
? ? ? ? ? ? ? ?示例? :? ?
t = (1,2,3,4,5) >>> t[0]=5 Traceback (most recent call last):File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment? ? ? ? ? ? ? 我們知道 元組類型是不可變的,是不能夠修改里面的值的,如上示!!!
? ? ? ? ? ? ? 倘若 元組 如下所示時(shí) :
t = (1,2,3,4,5,[1,2,355,88]) >>> t (1, 2, 3, 4, 5, [1, 2, 355, 88])? ? ? ? ? ? ? ?可以看到,元組 t 里面又包含了一個(gè)列表 ,這就是所謂的 不可變數(shù)據(jù)類型包含了可變數(shù)
???????????????據(jù)對(duì)象,因?yàn)?#xff0c;列表是可變的!!
? ? ? ? ? ? ? ?這時(shí),就可以對(duì) 其進(jìn)行修改,但是,注意是只能修改可變對(duì)象的那一部分!!
t (1, 2, 3, 4, 5, [1, 2, 355, 88]) >>> t[5][1]=5t (1, 2, 3, 4, 5, [1, 5, 355, 88])? ? ? ? ? ? ? ?可以看到。此時(shí) 元組 t 的第5個(gè)元素也即 列表發(fā)生了變化,列表的第2個(gè)元素 2 變?yōu)?5!
總結(jié)
以上是生活随笔為你收集整理的Python 内置容器 之 字典 ( dict )超详细指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python编程:从入门到实践第二版答案
- 下一篇: 暑期计算机数学培训心得体会,关于暑期培训