聽說你也要自學python,看這兒就夠了(五)

前面我們基本講完了python的一個重要知識:序列(列表,元組,字符串),這一更同樣帶來一個很重要的python知識點:字典!(我個人把他理解做c語言當中的結構體,但也有點不同。看完這篇你就知道這字典到底是個啥了)

目錄

  1. 字典的用途
  2. 創建和使用字典
  3. 小結

福利大放送

關注公衆號:“我用代碼編織世界”有豪禮相贈。回覆書籍有驚喜哦!
在這裏插入圖片描述
小芝士:需要將一些列值組合成數據結構並通過編號來訪問各個值時,列表很有用。本章介紹一種可以通過名稱來訪問各個值的數據結構。這種數據結構稱爲映射字典是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"更有好禮相送哦!(解鎖更多電腦知識看這兒就夠了)

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章