字典(Dictionary)

經過之前的學習,我們可以知道list 和tuple 可以用來表示有序集合,之前我們那個例子是用list 來儲存了使用者的暱稱

user=['liangdianshui','twowater','两点水']

如果我們需要把使用者的帳號也記錄進去呢?

用list 可以這樣子解決:

user=[['liangdianshui','111111'],['twowater','222222'],['两点水','333333']]

可是這樣表示也不方便,而且很難根據暱稱找到對應的暱稱,且list 越長,耗時越長;這時候就可以用dict (字典)來表示了,Python 內置了字典(dict),dict 全稱dictionary,相當於JAVA 中的map,使用鍵-值(key-value)存儲,具有極快的查找速度。

user={'liangdianshui':'111111' ,'twowater':'222222' ,'两点水':'333333'}

1、dict (字典)的創建

#字典是另一個可變容器模型,且可儲存任意類型物件。

字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中,格式如下所示:

dict = {key1 : value1, key2 : value2 }

注意:鍵必須是唯一的,但值則不必。值可以取任何資料類型,但鍵必須是不可變的。

建立dict(字典)實例:

dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'两点水':'333333'}
dict2={'abc':1234,1234:'abc'}

2、存取dict (字典)

#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'两点水':'333333'}
print(dict1)

輸出的結果:

{'liangdianshui': '111111', 'twowater': '222222', '两点水': '333333'}

這裡要注意的一點是:如果字典中沒有這個鍵,是會報錯的。

3、修改dict (字典)

為字典新增內容的方法是增加新的鍵/值對,修改或刪除已有鍵/值對

#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'两点水':'333333'}
print(dict1)
# 新增一个键值对
dict1['jack']='444444'
print(dict1)
# 修改键值对
dict1['liangdianshui']='555555'
print(dict1)

輸出的結果:

{'liangdianshui': '111111', 'twowater': '222222', '两点水': '333333'}
{'liangdianshui': '111111', 'twowater': '222222', '两点水': '333333', 'jack': '444444'}
{'liangdianshui': '555555', 'twowater': '222222', '两点水': '333333', 'jack': '444444'}

4、刪除dict (字典)

透過del 可以刪除dict (字典)中的某個元素,也能刪除dict (字典)

透過呼叫clear() 方法可以清除字典中的所有元素

#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'两点水':'333333'}
print(dict1)
# 通过 key 值,删除对应的元素
del dict1['twowater']
print(dict1)
# 删除字典中的所有元素
dict1.clear()
print(dict1)
# 删除字典
del dict1

輸出的結果:

{'liangdianshui': '111111', 'twowater': '222222', '两点水': '333333'}
{'liangdianshui': '111111', '两点水': '333333'}
{}

#5、 dict (字典)使用時注意的事項

(1) dict (字典)是不允許一個鍵創建兩次的,但是在創建dict (字典)的時候如果出現了一個鍵值賦予了兩次,會以最後一次賦予的值為準

例如:

#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'两点水':'333333','twowater':'444444'}
print(dict1)
print(dict1['twowater'])

輸出的結果:

{'liangdianshui': '111111', 'twowater': '444444', '两点水': '333333'}
444444

( 2) dict (字典)鍵必須不可變,可是鍵可以用數字,字串或元組充當,但是就是不能使用列表

例如:

#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,123:'222222' ,(123,'tom'):'333333','twowater':'444444'}
print(dict1)

輸出結果:

{'liangdianshui': '111111', 123: '222222', (123, 'tom'): '333333', 'twowater': '444444'}

(3) dict 內部存放的順序和key 放入的順序是沒有任何關係

和list 比較,dict 有以下幾個特點:

查找和插入的速度極快,不會隨著key的增加而變慢

需要佔用大量的內存,內存浪費多

#而list相反:

查找和插入的時間隨著元素的增加而增加

佔用空間小,浪費記憶體很少

6、dict (字典) 的函數和方法

##str(dict) 輸出字典可列印的字串表示type(variable)# 回傳輸入的變數類型,如果變數是字典就回傳字典類型dict.clear()刪除字典內所有元素#dict.copy() 傳回一個字典的淺複製dict.values()以列表傳回字典中的所有值popitem() #隨機傳回並刪除字典中的一對鍵和值dict.items()以列表傳回可遍歷的(鍵, 值) 元群組數組
方法與函數描述
#cmp(dict1, dict2)比較兩個字典元素
len(dict)#計算字典元素個數




#

繼續學習