python學習10.10:Python dict字典詳解

和列表相同,字典也是許多數據的集合,屬於可變序列類型。不一樣之處在於,它是無序的可變序列,其保存的內容是以「鍵值對」的形式存放的。

字典類型是 Python 中惟一的映射類型。「映射」是數學中的術語,簡單理解,它指的是元素之間相互對應的關係,即經過一個元素,能夠惟一找到另外一個元素。如圖 1 所示。java



圖 1 映射關係示意圖


字典中,習慣將各元素對應的索引稱爲鍵(key,K值),各個鍵對應的元素稱爲值(value,V值),鍵及其關聯的值稱爲「鍵值對」。

字典類型很像學生時代經常使用的新華字典。咱們知道,經過新華字典中的音節表,能夠快速找到想要查找的漢字。其中,字典裏的音節表就至關於字典類型中的鍵,而鍵對應的漢字則至關於值。

總的來講,字典類型所具備的主要特徵如表 1 所示。
 python

表 1 Python 字典特徵shell

主要特徵 解釋
經過鍵而不是經過索引來讀取元素 字典類型有時也稱爲關聯數組或者散列表(hash)。它是經過鍵將一系列的值聯繫起來的,這樣就能夠經過鍵從字典中獲取指定項,但不能經過索引來獲取。
字典是任意數據類型的無序集合 和列表、元組不一樣,一般會將索引值 0 對應的元素稱爲第一個元素。而字典中的元素是無序的。
字典是可變的,而且能夠任意嵌套 字典能夠在原處增加或者縮短(無需生成一個副本,在原數據上進行操做),而且它支持任意深度的嵌套,即字典存儲的V值也能夠是列表或其它的字典。
字典中的鍵必須惟一 字典中,不支持同一個鍵出現屢次,不然,只會保留最後一個鍵值對。
字典中的鍵必須不可變 字典中的K值是不可變的,只能使用數字、字符串或者元組,不能使用列表(K值必須是可哈希的)

Python 中的字典類型至關於 Java 或者 C++ 中的 Map 對象。數組


和列表、元組同樣,字典也有它本身的類型。Python 中,字典的數據類型爲 dict,經過 type() 函數便可查看:函數

# a是一個字典類型
>>> a = {'one':1,'two':2,'three':3} 
>>> type(a)
<class 'dict'>

Python建立字典

建立字典的方式有不少,下面一一作介紹。spa

1) 花括號語法建立字典

因爲字典中每一個元素都包含 2 部分,分別是鍵和值,所以在建立字典時,鍵和值之間使用冒號分隔,相鄰元素之間使用逗號分隔,全部元素放在大括號 {} 中。

Python 字典類型的語法格式以下:.net

dictname = {'key':'value1', 'key2':'value2', ..., 'keyn':valuen}

其中 dictname 表示字典類型名,keyN: valueN 表示各個元素的鍵值對。須要注意的是,同一字典中各個元素的鍵值必須惟一

以下代碼示範了使用花括號語法建立字典:code

scores = {'語文': 89, '數學': 92, '英語': 93}
print(scores)
# 空的花括號表明空的dict
empty_dict = {}
print(empty_dict)
# 使用元組做爲dict的key
dict2 = {(20, 30):'good', 30:[1,2,3]}
print(dict2)

運行結果爲:對象

{'語文': 89, '數學': 92, '英語': 93}
{}
{(20, 30): 'good', 30: [1, 2, 3]}


能夠看到,同一字典中,K值能夠是整數、字符串或者元組,只要符合惟一和不可變的特性;對應的V值能夠是 Python 支持的任意數據類型。blog

2) 經過 fromkeys() 方法建立字典

Python 中,還可使用 dict 字典類型提供的 fromkeys() 方法建立全部鍵值爲空的字典,使用此方法的語法格式爲:

dictname = dict.fromkeys(list,value=None)

其中,list 參數表示字典中全部K值的列表,value 參數默認爲 None,表示全部鍵對應的值。

例如:

# 列表knowledge = ['語文', '數學', '英語']效果相同
knowledge = {'語文', '數學', '英語'}
scores = dict.fromkeys(knowledge)
print(scores)

運行結果爲:

{'語文': None, '數學': None, '英語': None}

能夠看到,knowledge 列表中的元素所有做爲了 scores 字典的鍵,而各個K值對應的V值都爲空(None)。此種建立方式,一般用於初始化字典,設置 value 的默認值。

3) 經過 dict() 映射函數建立字典

經過 dict() 函數建立字典的寫法有多種,表 2 羅列出了經常使用的幾種方式,它們建立的都是同一個字典 a。
 

表 2 dict() 函數建立字典

建立格式 注意事項
a = dict(one = 1, two = 2, three = 3) 注意,其中的 one、two、three 都是字符串,但使用此方式建立字典時,字符串不能帶引號。
demo = [('two',2),('one',1),('three',3)] #方式1
demo = [['two',2],['one',1],['three',3]] #方式2
demo = (('two',2),('one',1),('three',3)) #方式3
demo = (['two',2],['one',1],['three',3]) #方式4
a = dict(demo)
向 dict() 函數傳入列表或元組,而它們中的元素又各自是包含 2 個元素的列表或元組,其中第一個元素做爲鍵,第二個元素做爲值。
demokeys = ['one','two','three'] #還能夠是字符串或元組
demovalues = [1,2,3] #還能夠是字符串或元組
a = dict(zip(demokeys,demovalues))
經過應用 dict() 函數和 zip() 函數,可將前兩個列表轉換爲對應的字典。

注意,不管採用以上哪一種方式建立字典,字典中各元素的鍵都只能是字符串、元組或數字,不能是列表


若是不爲 dict() 函數傳入任何參數,則表明建立一個空的字典。例如以下代碼:

# 建立空的字典
dict5 = dict()
print(dict5)

運行結果爲:

{}

Python 訪問字典

列表、元組訪問元素都是經過下標,字典是經過鍵(K值)來訪問對應的元素值(V值)

由於字典中元素是無序的,因此不能像列表、元組那樣,採用切片的方式一次性訪問多個元素。

例如,若是想訪問剛剛創建的字典 a 中,獲取元素 1,可使用下面的代碼:

>>> a['one']
1

在使用此方法獲取指定鍵的值時,若是鍵不存在,則會拋出以下異常:

>>> a['four']
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    a['four']
KeyError: 'four'

另外,除了上面這種方式外,Python 更推薦使用 dict 類型提供的 get() 方法獲取指定鍵的值。get() 方法的語法格式爲:

dict.get(key[,default])

其中,dict 指的是所建立的字典名稱;key 表示指定的鍵;default 用於指定要查詢的鍵不存在時,此方法返回的默認值,若是不手動指定,會返回 None。
例如,經過 get() 方法獲取字典 a 中「two」對應的值,執行代碼以下:

>>> a = dict(one=1,two=2,three=3)
>>>a.get('two')
2

固然,爲了防止在獲取指定鍵的值時,因不存在該鍵而致使拋出異常,在使用 get() 方法時,能夠爲其設置默認值,這樣,即使指定的鍵不存在,也不回報錯。例如:

>>> a = dict(one=1,two=2,three=3)
>>> a.get('four','字典中無此鍵')
'字典中無此鍵'

Python刪除字典

和刪除列表、元組同樣,手動刪除字典也可使用 del 語句。例如:

>>> a = dict(one=1,two=2,three=3)
>>> a
{'one': 1, 'two': 2, 'three': 3}
>>> del(a)
>>> a
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    a
NameError: name 'a' is not defined
相關文章
相關標籤/搜索