到目前為止提及了 List、Tuple、Set,再加上今天將要複習的 Dictionary 字典,我們算是認識了四種可以存放多個元素的資料型態,其中 List 與 Dictionary 算是我個認覺得最重要的兩種,使用的頻率高出另外兩種不少。
字典 Dictionary 和其他三者不同的地方在於,List、Tuple、Set 裡面都是直接儲放各種資料型態的元素,然而 Dictionary 一如現實生活中的字典,會有一對鍵 Key 與值 Value。
好比現實生活中翻閱英文字典,如果我們查閱 blue,可以找到「名詞,藍色」或是「形容詞,憂鬱的」等幾種意思。在 Python 裡,「鍵 Key」即是「單字」,而「值 Value」則是「意思(內容物)」,所以當我們跟 Python 詢問 blue 這個鍵時,它會翻找字典並告訴我們有「藍色、憂鬱的」這幾種內容物。
還記得昨天我們在 Set 的文章裡,有提及使用 {}
時,如果沒有放入任何的元素時,例如:fruits = {}
,此時 fruits
不是一個 set,而會是一個空的 dictionary。(如果你現在露出一臉問號,那想必是不記得了。)
既然都忘了,我們從頭說說有哪些方式可以創建一個字典 Dictionary:
{}
大括號:稍早才說,若 {}
裡面沒有放入任何東西,此時會創建一個空字典,然而我們如果一開始想要創建一個「有東西」的字典,則需要放入鍵值(Key and Value)。(特別注意:如果放入一般的元素,則會變成 set 集合)
```py
person = {
'first_name':'Stephen',
'last_name':'Curry',
'age':34,
'country':'USA',
'is_marred':True,
'skills':['crossover', 'dribble', '3points', 'logo shot'],
}
在這個範例中,我們可以得知幾件事:
使用類別 dict()
:
# 引數需要是一個可迭代物件,而且裡面必須要有鍵值的搭配,不然會引起錯誤
dict1 = dict([('name', 'John'), ('age', 30), ('city', 'New York')])
print(dict1) # {'name': 'John', 'age': 30, 'city': 'New York'}
# 使用關鍵字引數
dict2 = dict(name='John', age=30, city='New York')
print(dict2) # {'name': 'John', 'age': 30, 'city': 'New York'}
# 使用已存在的字典,再複製出一個新的字典
existing_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
dict3 = dict(existing_dict)
print(dict3) # {'name': 'John', 'age': 30, 'city': 'New York'}
使用函數 zip()
:
# zip() 函數裡需要有兩個值,且兩個值要是可對應的串列或元組
keys = ['name', 'age', 'city']
values = ['John', 30, 'New York']
dict4 = dict(zip(keys, values))
print(dict4) # {'name': 'John', 'age': 30, 'city': 'New York'}
這時又要請出我們的萬用好朋友 len()
,基本上用 len()
來查詢物件的長度準沒錯。
person = {
'first_name':'Tim',
'last_name':'Parsons',
'age':29,
}
print(len(person)) # 3
由於字典 dictionary 具有無排序性、可變性等特性,所以我們無法透過索引值來取得特定的值,然而,我們可以像真實世界翻閱字典,只要我們知道裡面有什麼什麼鍵 key,便可以得知該鍵對應的值 key。
person = {
'first_name':'James',
'last_name':'Bond',
'age':41,
}
}
print(person['first_name']) # James
print(person['last_name']) # Bond
print(person['age']) # 41
我們也可以使用 get()
方法來查找對應的值,以前面的 person
為例,當我們使用 print(person.get('first_name'))
會印出 James
,然而如果我們使用 print(person.get('gender'))
,這時候會印出 None
讓我們知道說「字典裡面沒有這個鍵值」。
之前也有提及,我們可以透過新增 Create、查詢 Read、修改 Update、刪除 Delete 這幾個行為,迅速掌握一個東西的使用方式。
像是現實中的字典一樣,不會有單字沒有解釋,所以想要新增新的東西至現有的字典時,鍵與值缺一不可。
我們可以使用 []
新增鍵值到現有的字典裡,讓我們直接看範例:
my_dict = {'name': 'John', 'age': 30}
# 新增 city 與對應的 New York 至 my_dict 這個字典
my_dict['city'] = 'New York'
print(my_dict) # {'name': 'John', 'age': 30, 'city': 'New York'}
相信大家已經再熟悉不過,又要再請出我們的好朋友 in
運算子,但這邊有一點要注意的是,我們只能用 in
確認字典中是否有某個「鍵 key」,而不能確認是否有某個「值 value」,因為字典中每個單字(鍵)只會出現一次,但不同的單字(鍵)是有可能有同樣的意思(值)。
my_dict = {'name': 'John', 'age': 30}
print("name" in my_dict) # True
print("gender" in my_dict) # False
print("John" in my_dict) # False
跟新增鍵值類似,我們也可以使用 []
修改已經存在的鍵值,只要是 []
裡面放入的鍵 key 是已經存在於字典裡,此時透過 =
將重新賦值給該鍵。
person = {
'first_name':'James',
'last_name':'Brown',
'age':18,
'country':'American',
}
person['first_name'] = 'Mike'
person['age'] = 30
print(person) # {'first_name': 'Mike', 'last_name': 'Brown', 'age': 30, 'country': 'American'}
直接且暴力的方法,想必大家也相當熟悉——del
,話不多說,直接來看怎麼使用。
person = {
'first_name':'Jerry',
'last_name':'Li',
'age':25,
'country':'Taiwan',
'is_married':True,
}
del person['is_married'] # 刪除字典裡 is_married 的鍵值
print(person) # {'first_name': 'Jerry', 'last_name': 'Li', 'age': 25, 'country': 'Taiwan'}
當然你也可以使用 del person
把整個 person
字典都刪除掉。
寫到這裡,鐵人賽也進行了三分之一,開始會覺得寫文章是每天重要的一環,一方面受到完賽證明的驅使,另一方面也會因為寫文章,讓自己更熟悉語言與修改自己的筆記結構。
參與鐵人賽確實不是件容易的事,不過一旦鐵了心開始寫,並努力在每天的十二點以前送出文章,會逐漸找到對於自己的收穫,真心推薦!