Dictionary
2023/03/26
李慕庭
函數
- \(f(x) = y\)
- 一個\(x\)只能對到一個\(y\)
- \(x\) 不重複

pic source
Dictionary
- \(D(key) = value\)
- 一個\(key\)只能對到一個\(value\)
- \(key\)不重複
- dictionary 中每個元素都由key & value 組成
- key只能是不變的資料型態 :
- value可以是任何的資料型態 :
- string, value, list, another dictionary…
- 建立dictionary
| score = {"Fireball": 100, "Cookie": 60, "Chocolate":20} |
| |
| print(type(score)) |
| print(score) |
| cookies = dict(Chocolate=1, Mocha=2) |
| print(cookies) |
- 取得dictionary中的特定元素
傳入 \(key\) 值
和list, string tuple 傳入位置index不同
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| |
| print(score["Fireball"]) |
| print(score["Cookie"]) |
| print(score["Chocolate"]) |
會有什麼問題?
key error
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| |
| print(score["Mocha"]) |
How to solve key error - if
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| |
| if "Mocha" in score: |
| print(score["Mocha"]) |
How to solve key error - get()
- 如果找不到這個key值就會回傳None
- 也可以自訂找不到回傳的值
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| |
| print(score.get("Cookie")) |
| print(score.get("Mocha")) |
| print(score.get("Mocha", 0)) |
- 遍歷所有dictionary中的元素
在list中
| rank = [1, 3, 4, 6, 8] |
| |
| for i in range(5): |
| print(rank[i]) |
| |
| for i in rank: |
| print(i) |
在dictionary中如果照做?
會只取到key值
因此底下的程式碼只會輸出
Fireball
Cookie
Chocolate
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| |
| for k in score: |
| print(k) |
用item來遍歷!
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| |
| for k in score.items(): |
| print(k) |
Output
回傳的元素型態是tuple
包含了一個key跟一個value
('Fireball', 100)
('Cookie', 60)
('Chocolate', 20)
tuple 的特性
- 不可變動 – 因此做為dictionary的\(key\)
- 所秏儲存空間較少
建立tuple
| score = 1, 2, 3 |
| |
| print(score) |
如果想建立只有一個元素的tuple
| score1 = 1 |
| print(score1) |
| |
| score2 = 1, |
| print(score2) |
也可以直接加上小括號來設tuple
| score = (1, 2, 3) |
| print(score) |
甚至是空的tuple
| nothing = () |
| |
| print(nothing) |
| print(type(nothing)) |
將其他資料型態轉換為tuple (string)
| name = "Fireball" |
| tuple_name = tuple(name) |
| |
| print(type(tuple_name)) |
| print(tuple_name) |
將其他資料型態轉換為tuple (list)
| score = [1, 2, 3] |
| tuple_score = tuple(score) |
| |
| print(type(tuple_score)) |
| print(tuple_score) |
- 新增元素至dictionary
| score = {"Fireball":100, "Cookie":60} |
| print(score) |
| |
| score["Chocolate"] = 20 |
| print(score) |
- 更改dictionray中key對應到的值
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| print(score) |
| |
| score["Fireball"] = 0 |
| print(score) |
- 刪除dictionary中的特定元素
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| print(score) |
| |
| del score["Fireball"] |
| print(score) |
如果刪到不存在的key值
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| |
| del score["Mocha"] |
也可以一次刪掉所有的元素
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| |
| score.clear() |
跟list哪裡不一樣
- 存取元素不是依照順序/index,而是key值
- 不像list能按照value來刪除
輸出dictionary中元素數量
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| |
| print(len(score)) |
輸出所有的key值
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| |
| print(score.keys()) |
輸出所有的value值
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| |
| print(score.values()) |
輸出所有的元素
| score = {"Fireball":100, "Cookie":60, "Chocolate":20} |
| |
| print(score.items()) |
所有元素按key排序輸出
| score = {"Fireball":100, "Mocha":60, "Chocolate":20} |
| |
| print(sorted(score.items())) |
| |
| for k in sorted(score.items()): |
| print(k) |
所有元素按value排序輸出
| score = {"Fireball":100, "Mocha":60, "Chocolate":20} |
| |
| print(sorted(score.items(), key=lambda x:x[1])) |
| |
| for k in sorted(score.items(), key=lambda x:x[1]): |
| print(k) |
Dictionary 2023/03/26 李慕庭
{"metaMigratedAt":"2023-06-17T23:26:32.933Z","metaMigratedFrom":"YAML","title":"Dictionary","breaks":true,"contributors":"[{\"id\":\"cc9d2950-af2b-4feb-8745-4367e4091769\",\"add\":4488,\"del\":174}]"}