dict & set

      在〈dict & set〉中尚無留言

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)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *