前面提到串列是儲存一個個物件,並以索引值去存取,那如果我想要取出特定資料,我就要先知道它在串列中是第幾個之後,再把它取出來,這樣是不是非常麻煩呢?所以這時候Dict就派上用場拉~
字典的結構與串列非常相似,不過它是採用鍵值來尋找資訊,也就是以「鍵-值」方式儲存,如此我們就可以使用「鍵」來取得值了。字典式將元素置於大括弧內,其語法為:
字典名稱 = {鍵1:值1, 鍵2:值2, 鍵3:值3....}
dict1 = {"蘋果":30, "橘子":20, "水梨":50}
print(dict1["水梨"])
50
字典是種映射形式的型別,從「鍵(key)」映射到「值(value)」,值可以是任何型別的物件,例如字串、整數、串列、或另一個字典,鍵則是不可變物件,如字串、整數、tuple。由於字典是使用鍵做為索引取得值,因此「鍵」必須是唯一的,「值」則可以重複,若「鍵」重複的話,前面的「鍵」會被覆蓋掉只留後者。例子如下:
dict1 = {"Sean":[0,1,2], 44:20, (40,55,70):{'a':2,'b':35}}
print(dict1[(40,55,70)]) #此鍵為tuple
{'a':2,'b':35} #此值為dict
dict2 = {"蘋果":30, "橘子":20, "水梨":50, "蘋果":60}
print(dict2["蘋果"])
60 #被後者覆蓋
在了解它的基本建構後,就可以來進行簡單操作了~
字典是可修改的。
dict1 = {"蘋果":30, "橘子":20, "水梨":50}
dict1["水梨"]=100
print(dict1["水梨"])
100
字典可以增加元素。
dict1 = {"蘋果":30, "橘子":20, "水梨":50}
dict1["芭樂"]=80
print(dict1)
{'蘋果': 30, '橘子': 20, '水梨': 50, '芭樂': 80}
當然也能刪除。
dict1 = {"蘋果":30, "橘子":20, "水梨":50}
del dict1["蘋果"]
print(dict1)
{'橘子': 20, '水梨': 50}
接下來是進階操作的部分,這邊一樣也挑幾個常見的做說明,在文章最後一樣會列出所有方法歐~
字典的keys()方法可取得所有「鍵」組成的組合,資料型態為dict_keys;values()方法可取得所有「值」組成的組合,資料型態為dict_values,而最後items()方法是取得所有「鍵-值」的組合,資料型態為dict_items,那麼看看例子吧:
>>>dict1 = {"蘋果":30, "橘子":20, "水梨":50}
>>> dict1.keys() #keys()
dict_keys(['蘋果', '橘子', '水梨'])
>>> dict1.values() #values()
dict_values([30, 20, 50])
>>> dict1.items() #items()
dict_items([('蘋果', 30), ('橘子', 20), ('水梨', 50)])
可以將他們轉為字串做應用:
dict1 = {"蘋果":30, "橘子":20, "水梨":50}
list_item = list(dict1.keys())
list_price = list(dict1.values())
for i in range(len(list_item)):
print("%s的價格為%d元"%(list_item[i],list_price[i]))
#輸出結果
蘋果的價格為30元
橘子的價格為20元
水梨的價格為50元
最後再提醒一點,dict的鍵值配對並無順序,就算相同程式碼,放到不同版本的Python、或不同電腦執行,其結果所顯示的順序不一定相同,說不定每次都不一樣,總言之,dict字典只提供鍵映射到值這樣的關係,並不保證順序性。
下表列出字典的常用方法,以供未來參考:
方法 | 描述 |
---|---|
dict.keys() | 傳回dict中所有鍵的元素組合 |
dict.values() | 傳回dict中所有值的元素組合 |
dict.items() | 傳回dict中所有「鍵-值」的元素組合 |
dict.clear() | 刪除dict的所有項目 |
dict.copy() | 複製dict |
dict.pop(k) | 刪除鍵k的鍵值對,傳回k所對應的值 |
dict.get(k[,y]) | 返回鍵k的值,若未找到該鍵傳回none,若提供y,未找到k時傳回y |
dict.setdefault(k[,y]) | 與get()類似,若鍵k不存在就以參數的「鍵-值」建立新元素 |