字典屬于容器存儲(chǔ)肚邢、可變、映射訪問的數(shù)據(jù)類型乙各。相對(duì)于列表等數(shù)據(jù)類型,字典中的元素是通過鍵來進(jìn)行存取幢竹,而不是通過偏移量 —— 或者可以理解為列表等數(shù)據(jù)類型的鍵即為偏移量耳峦,而字典的鍵可以為任意值。并且在字典中元素是沒有特定順序的焕毫,Python 將字典中的元素從左到右隨機(jī)排序蹲坷,以便快速查找。
1. 創(chuàng)建字典
字典使用 { }
來定義邑飒,字典元素的語法格式為 Key: Value
循签,不同的元素使用 ,
分隔。將字典直接賦值給變量即可創(chuàng)建一個(gè)新的字典
>>> dict = {} # 一對(duì) {} 可以創(chuàng)建一個(gè)空字典
>>> dict
{}
>>> dict = {"name": "ybian", "year": 2015} # 字典的鍵-值可以是任意數(shù)據(jù)類型疙咸,且可以嵌套
>>> dict
{"name": "ybian", "year": 2015}
除此之外還可以使用 dict()
方法創(chuàng)建字典
>>> a = dict(one=1, two=2, three=3) # 使用 dict 方法創(chuàng)建字典县匠,如果輸入為一個(gè)映射對(duì)象,則直接進(jìn)行淺復(fù)制
>>> a
{'three': 3, 'two': 2, 'one': 1}
>>> b = dict([('one', 1), ('two', 2), ('three', 3)]) # 如果輸入為可迭代的,則可迭代元素必須成對(duì)出現(xiàn)乞旦,在每個(gè)值對(duì)中第一個(gè)元素為鍵贼穆,第二個(gè)為值
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
使用 fromkeys()
方法創(chuàng)建字典
>>> a = {}.fromkeys(('x', 'y'), 1) # 使用 fromkeys 創(chuàng)建一個(gè)新的字典,且元素具有相同的值
>>> a
{'y': 1, 'x': 1}
>>> a = {}.fromkeys(('x', 'y')) # 如果沒有指定值時(shí)兰粉,默認(rèn)為 None
>>> a
{'y': None, 'x': None}
2. 字典的基本操作
-
訪問字典中的元素
字典為映射訪問的數(shù)據(jù)類型故痊,只需指定鍵即可訪問字典的元素值
>>> a = {'one': 1, 'two': 2, 'three': 3}
>>> a['one'] # 指定要查找元素的鍵即可訪問字典中的元素
1
>>> a['four'] # 如果指定的鍵在字典中不存在玖姑,會(huì)引發(fā)一個(gè) KeyError 異常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'four'
-
判斷字典中是否存在某個(gè)鍵
使用
in
愕秫、not in
即可判斷一個(gè)鍵是否存在于字典中
>>> 'one' in a # 判斷鍵 one 是否在字典 a 中
True
>>> 'four' in a
False
-
修改字典中某個(gè)鍵的值
直接將要修改的數(shù)據(jù)賦值給鍵即可
>>> a['one'] = 0 # 修改字典中鍵為 one 的元素的值
>>> a
{'three': 3, 'two': 2, 'one': 0}
-
刪除字典中的元素
使用
del
刪除字典指定的鍵-值
>>> del a['one'] # 刪除字典中鍵為 one 的元素
>>> a
{'three': 3, 'two': 2}
>>> a.clear() # 清空字典中的所有元素
>>> a
{}
3. 字典內(nèi)建函數(shù)
-
len()
len()
函數(shù)返回字典中的鍵-值的數(shù)目
>>> len(a)
3
-
keys() 、 values() 客峭、 items()
這三個(gè)方法在需要對(duì)字典中的鍵或值進(jìn)行遍歷時(shí)十分有效
>>>a.keys() # 返回一個(gè)由字典的鍵組成的列表
['three', 'two', 'one']
>>> a.values() # 返回一個(gè)由字典的值組成的列表
[3, 2, 1]
>>> a.items() # 返回一個(gè)由所有(鍵-值)元組組成的列表
[('three', 3), ('two', 2), ('one', 1)]
-
get()
使用
get()
方法可以避免由于鍵的缺失而引起的異常
>>> a.get('one') # 使用 get 方法可以獲取指定鍵的值
1
>>> print a.get('four') # 當(dāng)指定的鍵在字典中不存在時(shí)返回 None 或指定的默認(rèn)值
None
-
update()
update 方法可以將兩個(gè)字典合并豫领,當(dāng)遇到相同的鍵時(shí)會(huì)直接覆蓋
>>> b = {'one':0, 'four':4}
>>> a.update(b) # 將 a 和 b 合并,并將 b 中的 'one' 對(duì)應(yīng)的值覆蓋 a 中 'one' 對(duì)應(yīng)的值
>>> a
{'four': 4, 'three': 3, 'two': 2, 'one': 0}
-
setdefault()
檢查字典中是否存在某個(gè)鍵舔琅,如果存在獲取該鍵對(duì)應(yīng)的值等恐,否則進(jìn)行賦值并返回值
>>> a.setdefault('one',0) # 由于 a 中存在 'one',返回對(duì)應(yīng)值不做任何操作
1
>>> a.setdefault('four',4) # a 中不存在 'four'备蚓,設(shè)置 four: 4 并返回值
4
>>> a
{'four': 4, 'three': 3, 'two': 2, 'one': 1}
-
pop()
類似于列表中的
pop()
函數(shù)课蔬,刪除對(duì)應(yīng)鍵并返回值
>>> a.pop('four')
4
>>> a
{'three': 3, 'two': 2, 'one': 1}
4. 字典注意事項(xiàng)
- 每個(gè)鍵只能對(duì)應(yīng)一個(gè)值,當(dāng)鍵發(fā)生沖突時(shí)直接覆蓋值
>>> a = {'one':1, 'one':0}
>>> a
{'one': 0}
-
鍵必須是可哈希的
所有不可變的數(shù)據(jù)類型都是可哈希的(對(duì)于數(shù)字而言郊尝,值相等數(shù)字表示同一個(gè)鍵二跋,即 1 和 1.0 為同一個(gè)鍵)。使用
hash()
函數(shù)可以判斷一個(gè)數(shù)據(jù)是否是可哈希的
>>> hash('one') # 如果參數(shù)是可哈希則會(huì)返回其哈希值
4135046628013640463
>>> hash([1, 2]) # 如果參數(shù)是不可哈希的會(huì)引發(fā)異常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
-
序列運(yùn)算對(duì)字典無效
字典是無序的數(shù)據(jù)類型流昏,因此所有序列運(yùn)算對(duì)字典無效且會(huì)引發(fā)異常
參考
Dict