經(jīng)過之前的學(xué)習(xí),我們可以知道 list 和 tuple 可以用來表示有序集合,之前我們那個(gè)例子是用 list 來存儲(chǔ)了用戶的昵稱
user=['liangdianshui','twowater','兩點(diǎn)水']
如果我們需要把用戶的賬號(hào)也記錄進(jìn)去呢?
用 list 可以這樣子解決:
user=[['liangdianshui','111111'],['twowater','222222'],['兩點(diǎn)水','333333']]
可是這樣表示也不方便,而且很難根據(jù)昵稱找到對(duì)應(yīng)的昵稱,且 list 越長(zhǎng),耗時(shí)越長(zhǎng);這時(shí)候就可以用 dict (字典)來表示了,Python 內(nèi)置了 字典(dict),dict 全稱dictionary,相當(dāng)于 JAVA 中的 map,使用鍵-值(key-value)存儲(chǔ),具有極快的查找速度。
user={'liangdianshui':'111111' ,'twowater':'222222' ,'兩點(diǎn)水':'333333'}
字典是另一種可變?nèi)萜髂P?,且可存?chǔ)任意類型對(duì)象。
字典的每個(gè)鍵值(key=>value)對(duì)用冒號(hào)(:)分割,每個(gè)對(duì)之間用逗號(hào)(,)分割,整個(gè)字典包括在花括號(hào)({})中 ,格式如下所示:
dict = {key1 : value1, key2 : value2 }
注意:鍵必須是唯一的,但值則不必。值可以取任何數(shù)據(jù)類型,但鍵必須是不可變的。
創(chuàng)建 dict(字典)實(shí)例:
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'兩點(diǎn)水':'333333'}
dict2={'abc':1234,1234:'abc'}
#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'兩點(diǎn)水':'333333'}
print(dict1)
輸出的結(jié)果:
{'liangdianshui': '111111', 'twowater': '222222', '兩點(diǎn)水': '333333'}
這里需要注意的一點(diǎn)是:如果字典中沒有這個(gè)鍵,是會(huì)報(bào)錯(cuò)的。
向字典添加新內(nèi)容的方法是增加新的鍵/值對(duì),修改或刪除已有鍵/值對(duì)
#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'兩點(diǎn)水':'333333'}
print(dict1)
# 新增一個(gè)鍵值對(duì)
dict1['jack']='444444'
print(dict1)
# 修改鍵值對(duì)
dict1['liangdianshui']='555555'
print(dict1)
輸出的結(jié)果:
{'liangdianshui': '111111', 'twowater': '222222', '兩點(diǎn)水': '333333'}
{'liangdianshui': '111111', 'twowater': '222222', '兩點(diǎn)水': '333333', 'jack': '444444'}
{'liangdianshui': '555555', 'twowater': '222222', '兩點(diǎn)水': '333333', 'jack': '444444'}
通過 del
可以刪除 dict (字典)中的某個(gè)元素,也能刪除 dict (字典)
通過調(diào)用 clear()
方法可以清除字典中的所有元素
#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'兩點(diǎn)水':'333333'}
print(dict1)
# 通過 key 值,刪除對(duì)應(yīng)的元素
del dict1['twowater']
print(dict1)
# 刪除字典中的所有元素
dict1.clear()
print(dict1)
# 刪除字典
del dict1
輸出的結(jié)果:
{'liangdianshui': '111111', 'twowater': '222222', '兩點(diǎn)水': '333333'}
{'liangdianshui': '111111', '兩點(diǎn)水': '333333'}
{}
(1) dict (字典)是不允許一個(gè)鍵創(chuàng)建兩次的,但是在創(chuàng)建 dict (字典)的時(shí)候如果出現(xiàn)了一個(gè)鍵值賦予了兩次,會(huì)以最后一次賦予的值為準(zhǔn)
例如:
#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'兩點(diǎn)水':'333333','twowater':'444444'}
print(dict1)
print(dict1['twowater'])
輸出的結(jié)果:
{'liangdianshui': '111111', 'twowater': '444444', '兩點(diǎn)水': '333333'}
444444
(2) dict (字典)鍵必須不可變,可是鍵可以用數(shù)字,字符串或元組充當(dāng),但是就是不能使用列表
例如:
#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,123:'222222' ,(123,'tom'):'333333','twowater':'444444'}
print(dict1)
輸出結(jié)果:
{'liangdianshui': '111111', 123: '222222', (123, 'tom'): '333333', 'twowater': '444444'}
(3) dict 內(nèi)部存放的順序和 key 放入的順序是沒有任何關(guān)系
和 list 比較,dict 有以下幾個(gè)特點(diǎn):
查找和插入的速度極快,不會(huì)隨著key的增加而變慢
而list相反:
查找和插入的時(shí)間隨著元素的增加而增加
方法和函數(shù) | 描述 |
---|---|
cmp(dict1, dict2) | 比較兩個(gè)字典元素 |
len(dict) | 計(jì)算字典元素個(gè)數(shù) |
str(dict) | 輸出字典可打印的字符串表示 |
type(variable) | 返回輸入的變量類型,如果變量是字典就返回字典類型 |
dict.clear() | 刪除字典內(nèi)所有元素 |
dict.copy() | 返回一個(gè)字典的淺復(fù)制 |
dict.values() | 以列表返回字典中的所有值 |
popitem() | 隨機(jī)返回并刪除字典中的一對(duì)鍵和值 |
dict.items() | 以列表返回可遍歷的(鍵, 值) 元組數(shù)組 |