什麼是 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 來做更多事情執行程式。

results matching ""

    No results matching ""