Python版本:3.6.2 操作系統:Windows 作者:SmallWZQ
知識源於生活。Python也是如此。
提到字典,我首先想到的是數學大師——高斯。
為何想起他呢?這主要是因為高斯算法嘛。計算1+2+3+...+100,一般人都會從1一直加到100,而高斯卻另辟蹊徑,找到規律,從而發現“高斯算法”。高斯算法極大地提高運算效率。對於Python中的字典,它與高斯算法異曲同工,同樣能提高鍵值對的查找效率。
映射(mapping):通過名字來引用值的數據結構。
字典是Python中唯一內建的映射類型。字典的鍵值對(Key-Values),鍵是不可變的,可以為字符串、數字(int、float......)、元組等等。
字典中的鍵是唯一的,而值卻可以相同。
Python格式如下:
1 phone = {'Jack':'0571','James':'7856','Paul':'2364'} #大括號,且鍵值對之間用冒號(:)隔開
注:對於上面的代碼,可能有讀者會疑問:為什么用字符串表示電話號碼呢?
主要是考慮以“0”開頭的電話號碼。定義電話號碼時,以“0”開頭會顯示錯誤(Error)。因此,為了考慮周全,字典中電話號碼應表示為數字字符串,而不是整數。
圖1 電話號碼錯誤示例
1.創建字典和訪問元素
創建方式如下:
d = {'a':'97','b':'98','c':'99','c':'101'} print(d)
d['a']
'97'
注:字典中即使鍵相同,也只會輸出其中一個(若Key相同,后面的值(Value)會把前面的覆蓋掉)。
2.添加元素
字典沒有insert()方法,但依然能夠添加元素。
d = {'a':'98','b':'99','c':'100'} d['d'] = '101' print(d)
3.刪除元素
字典中刪除元素,使用pop()方法。pop()方法用於獲得對應於給定鍵的值,並將該鍵值對從字典中移除。
d ={‘a':'97','b':'98','c':'99'} d.pop('b') '98' print(d) {‘a':'97','c':'99'}
注:除了pop()方法,還可以使用del方法
4.修改元素
字典中的元素如何修改呢?很簡單,直接通過Key修改Value。
d ={‘a':'97','b':'98','c':'99'} d['b'] = '200' print(d['b']) '200' print(d) d ={‘a':'97','b':'200','c':'99'}
5.查找元素
字典中查找元素與修改元素類似,也是通過Key來查找字典中的Value。
d ={‘a':'97','b':'98','c':'99'} d['b'] '98' d['c'] '99'
如果字典中沒有該Key時,dict會報錯。
圖2 錯誤提示(KeyError)
如何避免Key不存在的錯誤呢?
1.通過k in d,判斷Key是否在dict中:
‘a’ in d True 'f' in d False
2.get()方法用於更寬松的訪問字典項的方法。如果Key不存在,使用get()沒有任何異常,僅僅返回None值:
圖3 get()方法示例
注:通過d.get('f','120')並不能往字典d ={}中添加鍵-值對。
6.字典基本操作總結
♦len(d):返回d中鍵-值對的數量;
♦d[k]:返回關聯到鍵K上的值(Value);
♦d[k] = V:將值V關聯到將K上;
♦del d[k]:刪除鍵為K的項;
♦K in d:檢查d中是否含有鍵K的元素;
♦鍵K類型:字符串、數字或元組,符合條件的不可變類型均可;
♦字典格式化字符串:%(Jack)s %(phone)。【其中Jack為鍵,而phone為dict{}】
其實,元組不一定可以用於dict的鍵(Key):
d ={‘a':'97','b':'98','c':'99'} d[(1,2,3,4,5,6)] = '121' print(d) d ={‘a':'97','b':'98','c':'99',(1,2,3,4,5,6):'121'} d[(1,2,[1,2,3])] = '188' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
注:如果元組用於鍵,元組中不能含有可變內容list,否則編譯錯誤。
字典總結:
1.字典中元素必須以鍵值對的形式出現;
2.字典中的鍵必須是不可變的,可以是字符串、數字以及元組,並且無法修改;
3.Key是唯一的,不可重復,而Value可以重復;
4.字典查找和插入元素極快,並不會隨着Key增加而減慢;
5.字典占用內存大,以空間換取時間;
6.特別地,當tuple作為字典中的鍵(Key)時,tuple中不能包含list,否則編譯錯誤。