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)
