4.7 字典(dict)
字典是Python中一種非常重要的資料型別,字典和之前的串列、元組不同,里面的元素使用鍵-值對進行存盤,通常字典中元素的鍵由字串或數字等可哈希資料型別組成,
可以把字典想象成一個集合,只不過每個元素都是由鍵-值對組成,字典中的元素的鍵是不能重復的,字典中的元素也是無序的,這點和集合一樣,
可以通過鍵獲取集合中元素的值,并且速度要遠快于串列,這種速度上的差異在資料量特別大時更加明顯,
4.7.1 字典的創建
4.7.1.1 通過字典識別符號號創建
串列在創建的時候用{}做標識,內部的元素用逗號進行分隔,注意:字典和集合都是用{}做標識的,
>>> dct1 = {} # 空字典
>>> dct2 = {'a': 1, 'b': 2} # 字典中存放了2個元素
>>> dct3 = {'小明': 20, '小芳': 18} # 字典中存放了2個元素
>>> dct4 = {[1]: 2} # 嘗試用不可哈希資料型別(串列)作為鍵導致報錯
Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "", line 1, in
TypeError: unhashable type: 'list'
4.7.1.2 通過字典推導式創建
>>> dct = {i: i ** 2 for i in range(3)}
>>> dct
{0: 0, 1: 1, 2: 4}
4.7.1.3 通過dict函式創建
>>> dict() # 空字典
>>> dict(a='a', b='b', c='c') # 通過關鍵字創建字典
>>> dict(zip(['one', 'two'], [1, 2])) # 通過映射函式方式創建字典
>>> dict([('one', 1), ('two', 2)]) # 通過可迭代物件創建字典
4.7.2 字典的訪問
4.7.2.1 通過鍵訪問
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct['two']
2
>>> dct['zero'] # 如果鍵不存在,則會報錯
Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
4.7.2.2 遍歷字典
參見可迭代物件的遍歷
注意:遍歷字典和其它遍歷可迭代物件有所區別,遍歷字典所得到的是字典的所有的元素的鍵,
dct = {'one': 1, 'two': 2, 'three': 3}
for i in dct:
print(i)
one
two
three
4.7.2.3 成員資格檢查
參見可迭代物件中的成員資格檢查
注意:成員資格檢查和其它可迭代物件有所區別,對于字典,是判斷某個成員是否是字典的某個元素的鍵,
dct = {'one': 1, 'two': 2, 'three': 3}
print('one' in dct)
print('zero' in dct)
True
False
4.7.3 字典的修改
4.7.3.1 單個元素的修改
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct['two'] = 22
>>> dct['two']
22
4.7.3.2 通過|得到更新后的字典
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct2 = {'zero': 0, 'two': 22}
>>> dct3 = dct | dct2
>>> dct3
{'one': 1, 'two': 22, 'three': 3, 'zero': 0}
4.7.3.3 通過|=原地更新字典
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct2 = {'zero': 0, 'two': 22}
>>> dct |= dct2
>>> dct
{'one': 1, 'two': 22, 'three': 3, 'zero': 0}
4.7.3.4 通過解包方式得到更新后的字典
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct2 = {'zero': 0, 'two': 22}
>>> dct3 = {**dct, **dct2}
>>> dct3
{'one': 1, 'two': 22, 'three': 3, 'zero': 0}
4.7.4 字典的洗掉
4.7.4.1 洗掉某個元素
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> del dct['two']
>>> dct['two'] # 洗掉元素后再次訪問則會報錯
Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "", line 1, in
KeyError: 'two'
4.7.4.2 洗掉整個字典
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> del dct
>>> dct # 洗掉字典后再次訪問則會報錯
Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "", line 1, in
NameError: name 'dct' is not defined. Did you mean: 'dct1'?
4.7.5 字典的方法
4.7.5.1 添加元素
4.7.5.1.1 dict.update(dict2)
描述
把字典dict2的鍵/值對更新到dict里
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct2 = {'zero': 0, 'two': 22}
>>> dct.update(dct2)
>>> dct
{'one': 1, 'two': 22, 'three': 3, 'zero': 0}
4.7.5.2 洗掉元素
4.7.5.2.1 clear()
描述
清空字典(洗掉字典中所有的元素)
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.clear()
>>> dct
{}
4.7.5.2.2 pop(key[,default])
描述
回傳并洗掉字典中key這個鍵對應的值,如果鍵不存在,則回傳default作為提示資訊,如果沒有設定default,則會引發KeyError例外,
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.pop('one')
1
>>> dct
{'two': 2, 'three': 3}
>>> dct.pop('zero', '沒有這個key')
'沒有這個key'
>>> dct.pop('zero')
Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "", line 1, in
KeyError: 'zero'
4.7.5.2.3 popitem()
描述
回傳并洗掉字典中的最后一對鍵和值,
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.popitem()
('three', 3)
>>> dct
{'one': 1, 'two': 2}
4.7.5.3 查詢統計類
4.7.5.3.1 get(key, default=None)、setdefault(key, default=None)
描述
回傳(設定)指定鍵的值,如果鍵不在字典中回傳(設定)default設定的默認值,
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.get('one')
>>> dct.get('zero')
>>> dct.get('zero', 0)
1
None
0
注意:
1、如果指定的鍵存在,則get或者setdefault都是獲取到這個鍵的值,
2、如果指定的鍵不存在,則get直接回傳default指定的值,而setdefault不但回傳default指定的值還會修改字典的內容,
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.get('zero', 0)
0
>>> dct
{'one': 1, 'two': 2, 'three': 3}
>>> dct.setdefault('zero', 0)
0
>>> dct
{'one': 1, 'two': 2, 'three': 3, 'zero': 0}
4.7.5.3.2 keys()、values()
描述
回傳字典所有的鍵(值),注意回傳的結果是dict_keys和dict_values型別的資料,可以通過for回圈獲取里面的元素,也可以通過list或者tuple轉換成串列或元組,
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.keys()
dict_keys(['one', 'two', 'three'])
4.7.5.3.3 items()
描述
回傳字典所有的鍵-值,注意回傳的結果是dict_items型別的資料,可以通過for回圈獲取里面的元素,也可以通過list或者tuple轉換成串列或元組,
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct.items()
dict_items([('one', 1), ('two', 2), ('three', 3)])
4.7.5.4 其它類
4.7.5.4.1 copy()
描述
回傳一個字典的淺復制
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct2 = dct.copy()
>>> dct2
{'one': 1, 'two': 2, 'three': 3}
4.7.5.4.2 fromkeys(seq, val)
描述
創建一個新的字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應的初始值,如果沒有提供val則所有鍵的值默認為None,
示例
>>> dct = {'one': 1, 'two': 2, 'three': 3}
>>> dct2 = dct.fromkeys('abc')
>>> dct3 = dct.fromkeys('abc', 123)
>>> dct2
>>> dct3
{'a': None, 'b': None, 'c': None}
{'a': 123, 'b': 123, 'c': 123}
4.7.6 字典的應用
4.7.6.1 將字串格式設定功能用于字典
在之前的學習中,我們知道了可以通過format的方式對字串進行格式化,這里介紹一種更加簡單易用的方式,那就是通過format_map來實作對字串的格式化,
format_map可以讓我們通過一個字典映射來對字串進行格式化,
>>> phonebook = {'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
>>> "Cecil's phone number is {Cecil}.".format_map(phonebook)
"Cecil's phone number is 3258."
在模板系統中,這種字串格式設定方式很有用(下面的示例使用的是HTML),
>>> template = '''
>>> ...
>>> ...
>>> ...
{title}
>>> ...
{text}
>>> ... '''
>>> data = https://www.cnblogs.com/sibide/archive/2022/08/20/{'title': 'My Home Page', 'text': 'Welcome to my home page!'}
>>> template.format_map(data)
<html> <head><title>My Home Page</title></head> <body> <h1>My Home Page</h1> <p>Welcome to my home page!</p> </body>
4.7.6.2 字典排序
字典其實是一種無序的資料,但是有時候又希望字典能夠按照一定的順序一遍我們能夠輸出或者查看,這時就需要對字典進行排序了,
4.7.6.2.1 根據key排序
dct = {'one': 1, 'two': 2, 'three': 3}
for k in sorted(dct):
print(k, dct[k])
one 1
three 3
two 2
4.7.6.2.2 根據value排序
dct = {'one': 1, 'two': 2, 'three': 3, 'zero': 0}
for k in sorted(dct, key=dct.__getitem__):
print(k, dct[k])
從自動化辦公到智能化辦公zero 0
one 1
two 2
three 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502385.html
標籤:其他
下一篇:基于django中間件的編程思想
