Dictionary
字典具有key-value的對應關係, 可以借由key快速找到相對應的值, 且沒有資料愈大速度愈慢的問題. 語法如下
score = {'Michael': 95, 'Bob': 75, 'Tracy': 85} print(score["Michael"]) 結果 : 95
建立空白字典
dic={}
新增字典
直接將key及值放入即可, 如
score[“Thomas”]=100.
取值
取出亦只需使用score[“Tracy”]. 但如果key值不在, 比如print(score[“Merry”]), 則會出現 KeyError: 'Thomas'.
避免 Key error, 可使用如下
if 'Tracy' in score: print(score["Tracy"])
或是使用 get的方法
print(score.get("Thomas", -1))
刪除
刪除某個key值, 使用pop(“key”), 如 score.pop(“Thomas”)
訪問所有的值, 可以for in, 如下
for x in score: print("%s : %s" % (x, score[x]))
字典採用Hash演算法, 所以存取的速度非常快
key的型態
key的形態不是只能使用字串而以,其實是任何型態多可以,如
a[1]=123 a[5]=102 print(len(a)) 結果 : 2
字典應用
下面代碼, 可記錄如下資料庫的資料
id | 商品 | 說明 | 單價 |
1 | 烏龍茶 | 阿里山 | 500 |
2 | 紅茶 | 鍚欄 | 200 |
3 | 綠茶 | 日本 | 300 |
4 | 冬片 | 民間 | 600 |
5 | 絞股蘭 | 福建 | 250 |
6 | 普耳茶 | 雲南 | 5000 |
import numpy as np fields=np.array(['id', '商品','說明','單價']) d=np.array( [ [1, '烏龍茶','阿里山',500], [2, '紅茶','鍚蘭',200], [3, '綠茶','日本',300], [4, '冬片','民間',600], [5, '絞股蘭','福建',250], [6, '普耳茶','雲南',5000] ] ) wareHouse=[] for i in range(0, len(d)): tea={} for j in range(0, len(fields)): tea[fields[j]]=d[i][j] wareHouse.append(tea) #列印欄位 for key in wareHouse[0].keys(): print("%s\t" % (key), end='') print() #列印資料 for row in wareHouse: for key in row.keys(): print("%s\t" % (row[key]), end="") print() 結果 : id 商品 說明 單價 1 烏龍茶 阿里山 500 2 紅茶 鍚蘭 200 3 綠茶 日本 300 4 冬片 民間 600 5 絞股蘭 福建 250 6 普耳茶 雲南 5000
大樂透
在list中曾寫過一支大樂透電腦選號程式,為了解決號碼重複的問題,還做用蠻麻煩的比對迴圈。但如果使用字典的話,則簡單多了,因為字典不會重複。
import random datas={} while len(datas)<7: n=random.randint(1,49) datas[n]=n for key in datas.keys(): print(datas[key]) 結果: 12 49 38 30 1 31 33
Set
set是一個無序且不可重複的容器, 必需使用set()方法, 然後將list放入, 才會形成一個set, 如下
student=set(["Thomas", "John", "Tracy", "John"]) print(student) 結果 : {'John', 'Thomas', 'Tracy'}
上面John重複輸入, 所以只會保留一個
新增, 刪除則使用add及remove方法, 如下
student=set(["Thomas", "John", "Tracy", "John"]) student.add("張無忌") student.remove("Tracy") print(student)