簡明了解python基本數據類型-字典

????“字典”是Python語言中最重要的三種數據類型(字符串、列表、字典)之一,它的用處很多,本身的功能也很強大。實際上,三種最基本的數據類型用途都很廣泛,功能都很強大。但Python字典不同于其它兩種類型的是,它通過名稱而不是索引來訪問其中的各個值。其是一種可以稱為“映射”的數據結構,也是Python中唯一的內置映射類型。

????“字典”的名稱即指出了這種數據結構的用途。普通圖書適合按照從頭到尾的順序閱讀,當然,如果我們愿意,也可快速翻到想要的某一頁,這有點像Python中的列表。日常生活中的字典通常作為工具書來用,能夠讓我們輕松地找到特定的單詞,以獲悉單詞的定義。Python字典能夠幫助我們快速地找到想要的“鍵”,從而獲得其相應的“值”。


????Python字典的“鍵”和“值”都可能包含有用的信息。它們都可以用來做文章。要定義一個字典,通常有兩種方式。

? ? 第一種是直接定義:

通過d = {key1: 值1, key2: 值2, ...}

比如:phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

????字典的基本元素稱為鍵值對(key-value對),也可以稱為“項”(item)。每個項(鍵值對)使用冒號(:)分割鍵和值,每項之間使用逗號(,)分割,整個字典包括在花括號({})中。其中的鍵(key)和值(value)一一映射,一一對應。

????第二種是通過dict()函數來定義:

????函數dict()能夠接收具備映射性質的實參來創建字典

????a.接收關鍵字實參

????比如:d = dict(name='David', age=25)

>>> d = {'name': 'David', 'age': 25}

????b.接收類似[(a1, b1), (a2, b2), ...]的實參

例:d = dict([('name', 'David'), ('age', 25)])將創建與上個例子相同的字典

>>> d = {'name': 'David', 'age': 25}

????像函數list、tuple和str一樣,如果調用dict()函數時沒有提供任何實參,將返回一個空字典。即dict()={}。

????需要注意的是,雖然字典基本能夠容納任何類型的數據,但只是針對它的“值”而言的。字典的“鍵”必須是不可變類型的數據,比如:字符串,元組,數,而不能是:列表,字典或其他可變類型的數據。

????還有一點,因為字典是通過“鍵”訪問其中的“值”,所以鍵必須是唯一的。否則,計算機會覺得混亂,不知道我們想要哪個值。并且字典中的項是無序的,因為已經有“鍵”了,我們無需再通過順序來標識其中的項。不必像列表、元組和字符串一樣使用索引為它們所包含的元素排序。


????字典的很多基本操作類似于其他序列,大致包含如下:

????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的項

????方法2)中是根據字典中已經存在的鍵獲取其關聯的值;方法3)是將新值v賦值給字典中不存在的鍵或者是已經存在的鍵,如果鍵存在新值v覆蓋原有的值,如果鍵不存在就創建一個新的鍵-值對。


????Python字典內置有很多方法,可以使用它們來操作字典,獲得我們想要的結果。

????1)clear

作用:刪除字典中的所有項

返回值:該方法沒有返回值,或者說返回None

用法:d.clear()

例:

>>> d = {'name': 'David', 'age': 25}

>>> return_value = d.clear()

>>> d

{}

>>> return_value

None

????2)get

作用:get方法也能夠根據鍵獲得值,但比d[key]的方式取值更好用,后一種方法只適用于鍵存在時(否則會拋出異常),而get方法不會如此(鍵不存在時返回None)

用法:value = d.get(key)

例:

>>> d = {'name': 'David', 'age': 25}

>>> d.get('name')

'David'

>>> d.get('phone')

None

#【也可以設置鍵不存在時的返回值(如果不設置,即默認為None)】

>>> d.get('phone',119)

119

PS:在編寫取字典值的代碼時,使用此方法,我們將會體驗到它的好用。

????3)items

作用:返回一個包含所有字典項的列表,其中每個元素都為(key, value)的形式。

返回值:items方法返回的是一個“字典視圖”,dict_items(), 里面包含的即是返

? ? ? 回一個包含所有字典項的列表。

用法:t = d.items()

例:

>>> d = {'name': 'David', 'age': 25}

>>> t = d.items()

>>> t

dict_items([('name', 'David'), ('age', 25)])

PS:dict_items()是一種名為字典視圖的特殊類型,可用于迭代,可用于成員資格

檢查,可使用len(t)。但是不能當做正常的字典來用,比如:不能t['name'],不能

t[0]。并且它始終是底層字典的反映,t會跟隨字典d的變化而變化。

????4)keys

作用:返回一個包含所有字典key的列表,也屬于“字典視圖”,為dict_keys()。

例:

>>> d = {'name': 'David', 'age': 25}

>>> t = d.keys()

>>> t

dict_keys(['name', 'age'])

PS:其他跟items方法類似。

????5)values

作用:返回一個包含所有字典value的列表,也屬于“字典視圖”,為dict_values()。

例:

>>> d = {'name': 'David', 'age': 25}

>>> t = d.values()

>>> t

dict_values(['David', 25])

PS:其他跟items方法類似。

????6)pop

作用:用于獲取與指定鍵相關聯的值,并將該鍵-值對從字典中刪除。需要注意的是,當指定的鍵不存在時,會拋異常。

用法:value = d.pop(key)

例:

>>> d = {'name': 'David', 'age': 25}

>>> val = d.pop('age')

>>> val

25

>>> d

{'name': 'David'}

????7)popitem

作用:類似于list.pop,但list.pop彈出列表中的最后一個元素,而popitem彈出出一個字典項。但由于字典是無序的。最好使用OrderedDict來使用此方法。

返回值:彈出的字典項的元組形式。

用法:tur = d.popitem()

例:

>>> d = {'name': 'David', 'age': 25}

>>> d.popitem()

('age', 25)

>>> d

{'name': 'David'}

PS:OrderedDict是屬于“有序字典”類型,

? ? 形式為OrderedDict([('name', 'David'), ('age', 25)]),基本可以像操

? ? 作普通字典一樣操作它,但它其中的元素是有序的。

????8)setdefault

作用:方法setdefault有點像get,因為它也獲取與指定鍵相關聯的值,但除此之外,setdefault 還在字典不包含指定的鍵時,在字典中添加指定的鍵-值對。

用法:value = d.setdefault(key)

例:

>>> d = {'name': 'David', 'age': 25}

>>> val = d.setdefault('phone', 119)

>>> val

119

>>> d

{'name': 'David', 'age': 25, 'phone': 119}

>>> d = {'name': 'David', 'age': 25}

>>> val = d.setdefault('age', 18)

>>> val

25

>>> d

{'name': 'David', 'age': 25}

????9)update

作用:使用一個字典中的項來更新另一個字典。原字典中已經存在該項時,就替換;不存在就創建。

用法:d.update(d1)

例:

>>> d = {'name': 'David', 'age': 25}

>>> d.update({'phone': 119})

>>> d

{'name': 'David', 'age': 25, 'phone': 119}

>>> d.update({'name': 'Alice'})

>>> d

{'name': 'Alice', 'age': 25, 'phone': 119}

>>> d.update(age=18)

>>> d

{'name': 'Alice', 'age': 18, 'phone': 119}

????Python字典的方法不止這些,上述所列只是比較常用的。


關于字典無序的補充說明:

????Python字典中的項無序在python2.x版本中能夠容易的體現到。在python3.x中,Python字典會按照其中項的創建順序為它們排位,即它們有初始順序。但我們無法對這初始排序做些什么。下面的實例能夠體現Python字典的無序性:

>>> d1 = {'name': 'David', 'age': 25}

>>> d2 = {'age': 25, 'name': 'David'}

>>> d1 == d2

True

????而對于OrderedDict有序字典,上述測驗的結果為“False”

>>> from collections import OrderedDict

>>> d1 = OrderedDict([('name', 'David'), ('age', 25)])

>>> d1

OrderedDict([('name', 'David'), ('age', 25)])

>>> d2 = OrderedDict([('age', 25), ('name', 'David')])

>>> d1 == d2

False


參考書籍:

《Python基礎教程(第三版)》 ---作者:Magnus Lie Hetland?著,袁國忠?譯

鏈接:百度云盤

提取碼:7r7o

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容