什麼是 Dictionary?
什麼是 Dictionary 呢?想了解 Dictionary 之前,可以先想像你現在手上有一本電子英英字典, 當你輸入英文單字的時候,就可以查得到它的唯一翻譯。
也就是說,你所關心的 英文單字 與 翻譯 之間有著 一對一 的關係。
你輸入的英文單字,就叫做 Key ; 而得到的翻譯,就叫做 Value 。
一個 Dictionary 是一群 Key : Value 配對的集合。
建立一個 Dictionary 物件
建立一個 Dictionary 物件其實很簡單,讓我們先看個例子:
dic = {'python': 'Life is short,i use python',
'shopee': 'The best E-commerce platform in Asia.'}
當 Python 直譯器執行這段程式後,Dictionary 物件就生成了。
'python'
這個字串,在上例中即扮演 Key 的角色,而
'Life is short,i use python.'
這個字串,則扮演 Value 的角色。
而 Key : Value 之間以冒號 : 間隔之,如果有好幾對 Key : Value,則以逗號 , 間隔之。 當我們使用 [ ] 這個運算子的時候,我們就可以拿到它的 Value 了
print (dic['python'])
則會印出
Life is short,i use python.
取 得 Dictionary 物件中 Key 的個數
有的時候會想要知道 Dictionary 物件中,到底有幾對 Key, Value ,就如同取得字串的長度般,只要使用 len(d) 即可得到之。
print (len(dic))
則會印出
2
新增或修改一筆資料
假設我們有新的單字出現了,想要新增到剛才的 Dictionary 物件中,該如何做呢? 同樣地,也是使用 [ ] 這個運算子,這次還要配合上 = 這個運算子。
dic['game'] = 'Activity engaged in for diversion or amusement.'
print(dic)
則會印出
{'python': 'Life is short,i use python.',
'game': 'Activity engaged in for diverion or amusement.',
'ruby': 'A precious stone that is a red corundum.'}
我們可以發現, dic 這個物件中的確新增了一筆資料。 又假設我們想要修改某個單字的翻譯,也是用樣使用 [] 這個運算子並要配合上 = 這個運算子:
dic['python'] = 'A very powerful scripting language.'
print(dic)
則會印出
{'python': 'A very powerful scripting language.',
'game': 'Activity engaged in for diverion or amusement.',
'shopee': 'The best E-commerce platform in Asia.'}
我們可以發現, 原來的 python 這個單字所對應到的翻譯已經被改變了。
刪除一筆資料
假設我們現在要移除一個單字及其翻譯,我們可以利用 del 來達成這個目的。
del dic['game']
print (dic)
則會印出
{'python': 'Life is short,i use python.',
'shopee': 'The best E-commerce platform in Asia.'}
如此一來,'game' 這筆資料就被你刪除了。
試試看
假使你輸入
print (dic['no_ele_here'])
其中, 'no_ele_here' 並不在 Dictionary 之中,會發生什麼事呢?
[ 充電補給站 ]
如果key不存在,dict會報什麼樣的錯誤:
d['Thomas']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Thomas'
#要避免key不存在的錯誤,有兩種辦法,一是通過in判斷key是否存在:
>>> 'Thomas' in d
False
#二是通過dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
筆記 - 後話
dict內部存放的順序和key放入的順序是沒有關系的。
和list比較,dict有以下幾個特點:
查找和插入的速度極快,不會隨著key的增加而變慢; 需要占用大量的內存,內存浪費多。 而list相反:
查找和插入的時間隨著元素的增加而增加; 占用空間小,浪費內存很少。 所以,dict是用空間來換取時間的一種方法。
dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象。這是因為dict根據key來計算value的存儲位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的算法稱為哈希算法(Hash)。
要保證hash的正確性,作為key的對象就不能變。在Python中,字符串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key
What is next...
我們已經學會如何使用 Dictionary 來建立物件之間的一對一關係了,下次將介紹如何使用 if-else, while loop,for loop ,def ,class 來做更多事情執行程式。