前面我們基本講完了python的一個重要知識:序列(列表,元組,字符串),這一更同樣帶來一個很重要的python知識點:字典!(我個人把他理解做c語言當中的結構體,但也有點不同。看完這篇你就知道這字典到底是個啥了)
目錄
- 字典的用途
- 創建和使用字典
- 小結
福利大放送
關注公衆號:“我用代碼編織世界”有豪禮相贈。回覆書籍有驚喜哦!
小芝士:需要將一些列值組合成數據結構並通過編號來訪問各個值時,列表很有用。本章介紹一種可以通過名稱來訪問各個值的數據結構。這種數據結構稱爲映射。字典是python唯一的內置映射類型,其中的值不按順序,而是存儲在鍵下。鍵可能是數,也可能是字符串或者元組。鍵可能是數,也可能是字符串或者元組。
4.1 字典的用途
字典的名稱指出了這種數據結構的用途,普通圖書適合按從頭到尾的順序閱讀,如果你願意,你可以快速翻到任何一頁,這有點像拍攝中的的列表字典,日常生活中的字典和python字典,旨在讓你能夠輕鬆找到特定的詞(鍵)來獲取它的定義(值)
下面是一個電話本和一些號碼:
>>>names = ['Alice','Beth','Cecil','Dee','Eric']
>>>numbers = ['1234','1465','5689','8945','9874']
注意:光理論是不夠的,在此送大家一套2020最新Python全棧實戰視頻教程,點擊此處 進來獲取 跟着練習下,希望大家一起進步哦!
創建這些列表之後,就可以像下面這樣查找cecil的電話號碼
>>>numbers[names.index('cecil')]
'5689'
這樣可行,但是不太實用,實際上你希望能夠像下面這個樣子做:
>>>phonebool['cecil']
'3558'
如何達成這個目標呢?只要phonebook是個字典就行
4.2 創建和使用字典
字典由鍵以及對應的值組成,這種鍵值對叫做項,在前面的示例中,鍵爲名字,值爲電話號碼,每個鍵與值之間都用冒號分隔,項之間用逗號分隔,整個字典放在一個花括號,空的字典,沒有任何項目,用兩個花括號表示,就像這樣{}
4.2.1 函數dict
可以使用函數dict從其他映射(其他字典)或鍵值對序列來創建字典
>>>items = [('names','Gumby'),('age',42)]
>>>d = dict(items)
>>>d
{'age':42,'name':'Gumby'}
>>>d['name']
'Gumby'
可以使用關鍵字實參來調用這個函數:
>>>d = dict(name = 'Gumby',age = 42)
>>>d
{'age':42,'name':'Gumby'}
儘管這可能是函數dict最常見用法,但也是可以使用一個映射實參來調用他,這將創建一個字典,其中包含指定映射中所有項。像函數list,tuple和str一樣,如果調用這個函數時沒有提供任何實參,將返回一個空字典。從映射創建字典時候,如果該映射也是字典,可以不使用函數dict,而是使用地點方法copy。
4.2.2 基本的字典操作
字典的基本行爲在很多方面都和序列類似
- 1.len(d)返回字典d包含的項(鍵–值對)數目
- 2.d[k]返回與鍵k相關的聯的值
- 3.d[k] = v將值v關聯到鍵k
- 4.del d[k] 刪除鍵爲k的項
- 5. k in d檢查字典d是否包含鍵爲k的項
雖然字典和列表有多個相同之處,但也有一些重要的不同之處
4.2.3 字典方法
4.2.3.1 clear
方法clear刪除所有的字典項,這個操作就地執行,因此,沒有返回值
>>>d = {}
>>>d['name'] = 'Gumby'
>>>d['age'] = 42
>>>d
{'age' : 42,'name':'Gumby'}
>>>returned_value = d.clear()
>>>d
{}
>>>print(returned_value)
None
這爲什麼很有用呢?我們來看兩個場景。下面是第一個場景:
>>>x = {}
>>>y = x
>>>x['key']=value
>>>y
{'key' : 'value'}
>>>x = {}
>>>y
{'key' : 'value'}
下面是第二種場景:
>>>x = {}
>>>y = x
>>>x['key']='value'
>>>y
{'key' : 'value'}
>>>x.clear()
>>>y
{}
在這兩個場景中,x和y最初都指向同一個字典。在第一個場景中,我通過將一個空字典賦值x來清空他,這對y沒有任何影響,他依然指向原來字典,這種可行,但要是刪除原來字典的所有元素,必須使用clear。如果這樣做,y將也是空的,如第二個場景所示.
4.2.3.2 copy
4.2.3.2 copy
>>>x = {'username':'admin','machines':['foo','bar','baz']}
>>>y=x.copy()
>>>y['username'] = 'mlh'
>>>y['machines'].remove('bar')
>>>y
{'username':'mlh','machines':'baz'}
>>>x
{'username':'admin','machines':['foo','baz']}
使用深複製就能解決問題(from copy import deepcopy)
4.2.3.3 fromkeys
方法fromkeys創建一個新字典,其中包含指定的鍵,且每個鍵對應的值都是none
>>>{}.fromkeys(['name','age'])
{'age':None,'name':None}
這個示例創建了一個空字典,在對其調用方法fromkeys來創建另一個字典,這顯得有點多餘。你可以不這樣做,而是直接對dict調用方法fromkeys。
>>>dict.fromkeys(['name','age'])
{'age':None,'name':None}
如果你不喜歡使用默認值none,可以自定義
>>>dict.fromkeys(['name','age'],'(unknown)')
{'age':unknown,'name':unknown}
4.2.3.4 get
方法get爲訪問字典項提供了寬鬆環境。通常,如果你試圖訪問字典中沒有的項目,將引發錯誤。
>>>d = {}
>>>print(d['name'])
報錯
而使用get不會這樣
>>>print(d.get('name'))
None
如你所見,使用get來訪問不存在的鍵時,沒有引發異常,而是返回none。你可以指定”默認“,這樣將返回你指定的值而不是none。
>>>d.get('name','N/A')
'N/A'
如果字典中包含指定的鍵,get的作用將與普通字典查找相同。
>>>d['name'] = 'Eric'
>>>d.get('name')
'Eric'
4.2.3.5 items
方法items返回一個包含所有字典項的列表,其中每個元素都爲(key,value)的形式。字典項在列表中順序不確定
>>>d = {'title':'python web site', 'url':'http://www.python.org','spam':0}
>>>>d.items()
dict_items([('url','http://www.python.org'),('spam',0),('title','python web site')])
返回值屬於一種名爲字典視圖的特殊類型。字典視圖可用於迭代。另外,你還可確定其長度以及對其執行成員資格審查。
>>>it = d.items()
>>>len(it)
3
>>>('sapm',0) in it
True
視圖的一個優點是不復制,它們始終是底層字典的反映,即便你修改了底層字典也是如此
>>>d['spam'] = 1
>>>('spam',0) in it
False
>>>d['spam'] = 0
>>>('spam',0) in it
True
然而,如果你要將字典項複製到列表中可自己動手做。
>>>list(d.items())
[('spam',0),('title','python web site'),('url','http://www.python.org')]
4.2.3.6 keys
方法keys返回一個字典視圖,其中包含指定字典中的鍵
4.2.3.7 pop
方法pop可用於獲取與指定鍵相關聯的值,並將該鍵值對從字典中刪除
>>>d = {'x':1,'y':2}
>>>d.pop('x')
1
>>>d
{'y':2}
4.2.3.8 popitem
方法popitem類似於list.pop,但是list.pop彈出列表中最後一個元素,而popitem隨機地彈出一個字典項,因爲字典項順序不確定,所有沒有”最後“這個概念。
>>>d = {'url':'http://www.python.org','spam':0,'title':'python web site'}
>>>d.popitem()
('url','http://www.python.org')
>>>d
{'spam':0,'title':'python web site'}
雖然popitem類似於列表方法pop,但字典中沒有與append相類似的方法。因爲字典無序。
4.2.3.9 update
方法update使用字典中的項來更新另一個字典。
>>>d = {
... 'title':'python web site'
... 'url':'http://www.python.org'
... 'changed':
... }
>>>x = {'title':'python language website'}
>>>d.update(x)
>>>d
{'url':'http://www.python.org','changed':
'Mar 29 23:30:15 Met 2020','title':'python language website'}
4.2.3.10 values
方法values返回一個由字典中的值組成的列表視圖。不同於方法keys,方法values返回的視圖可能包含重複值
>>>d = {}
>>>d[1] = 1
>>>d[2] = 2
>>>d[3] = 3
>>>d[4] = 1
>>>d.values()
dict_values([1,2,3,1])
4.3 小結
注意:光理論是不夠的,在此送大家一套2020最新Python全棧實戰視頻教程,點擊此處 進來獲取 跟着練習下,希望大家一起進步哦!
本章介紹瞭如下內容:
- 映射:映射讓你能夠使用任何不可變的對象來標識元素
- 字典方法:字典有很多方法的調用方式與列表和字符串相同
往期精彩推薦
聽說你也要學python,看這兒就夠了(四)Please vivst me!
聽說你也要自學python,看這兒就夠了(三)Please vivst me!
聽說你也要自學python,看這兒就夠了(二)Please vivst me!
聽說你也要自學python,看這兒就夠了(一)Please vivst me!
預告
講完基本的數據結構,大家對使用已經有了基本的認識,下一章我們返璞歸真,下一更我們詳細講解基礎“語句”(注意哦,這裏是打引號的語句)
乾貨分享
關注公衆號:“我用代碼編織世界”既有大禮相贈!
後臺回覆"python"更有好禮相送哦!(解鎖更多電腦知識看這兒就夠了)