什麼是字典?
字典和 list 類似,不同的是字典不會用[1]、[100]這種 index 來選擇項目。
字典是一個 key(鍵)-value(值) 的數據類型,每個 key 都是獨一無二
。
1 | student ={ |
2 | 'stud0001':'Mike', |
3 | 'stud0002':'Jenny', |
4 | 'stud0003':'Tom', |
5 | 'stud0004':'Bob', |
6 | } |
7 | print(student) |
8 | |
9 | ---------------執行結果--------------- |
10 | {'stud0001': 'Mike', 'stud0003': 'Tom', 'stud0002': 'Jenny', 'stud0004': 'Bob'} |
嗯? 怎麼沒有按照順序?
因為字典是不在乎項目的順序
,不像 list 有[0]、[1]……的順序。
字典取值
我們可以用 key 來找 value
方法一: [key]
1 | student ={ |
2 | 'stud0001':'Mike', |
3 | 'stud0002':'Jenny', |
4 | 'stud0003':'Tom', |
5 | 'stud0004':'Bob', |
6 | } |
7 | |
8 | print(student) |
9 | print(student['stud0001']) |
10 | print(student['stdu0005']) |
11 | |
12 | ---------------執行結果--------------- |
13 | {'stud0001': 'Mike', 'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob'} |
14 | Mike |
15 | |
16 | print(student['stdu0005']) |
17 | KeyError: 'stdu0005' |
因為字典裡面沒有’stdu0005’所以python就會報錯。
方法二: .get(key)
1 | student ={ |
2 | 'stud0001':'Mike', |
3 | 'stud0002':'Jenny', |
4 | 'stud0003':'Tom', |
5 | 'stud0004':'Bob', |
6 | } |
7 | |
8 | print(student) |
9 | print(student.get('stud0001')) |
10 | print(student.get('stud0005')) |
11 | |
12 | ---------------執行結果--------------- |
13 | {'stud0001': 'Mike', 'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob'} |
14 | Mike |
15 | None |
相較於方法一,.get(key)找不到時不會報錯,而是會回傳None
如果我們想知道所有 key 有什麼,可以使用 .keys()
。1
student ={
2
'stud0001':'Mike',
3
'stud0002':'Jenny',
4
'stud0003':'Tom',
5
'stud0004':'Bob',
6
}
7
8
print(student.keys())
9
10
---------------執行結果---------------
11
dict_keys(['stud0001', 'stud0002', 'stud0003', 'stud0004'])
那全部的 value 呢? 則使用 .values()
。
1 | student ={ |
2 | 'stud0001':'Mike', |
3 | 'stud0002':'Jenny', |
4 | 'stud0003':'Tom', |
5 | 'stud0004':'Bob', |
6 | } |
7 | |
8 | print(student.values()) |
9 | |
10 | ---------------執行結果--------------- |
11 | dict_values(['Mike', 'Jenny', 'Tom', 'Bob']) |
字典輸入
假如又多了一個學生,我們該怎麼加進 student 這個字典呢?
我們可以直接用 dict[key] = value。
當 key 存在時,舊的 value 會被 新的覆蓋。
當 key 不存在時,會建立一個新的。
1 | student ={ |
2 | 'stud0001':'Mike', |
3 | 'stud0002':'Jenny', |
4 | 'stud0003':'Tom', |
5 | 'stud0004':'Bob', |
6 | } |
7 | print(student) |
8 | |
9 | student['stud0001'] = 'Jake' |
10 | student['stud0005'] = 'Lulu' |
11 | print(student) |
12 | |
13 | ---------------執行結果--------------- |
14 | {'stud0001': 'Mike', 'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob'} |
15 | {'stud0001': 'Jake', 'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob', 'stud0005': 'Lulu'} |
student因為原本沒有’stud0005’,所以新增了 Lulu。
字典刪除
刪除字典的項目有三種方法:
- del: Python 內建的通用刪除方法。
del dict[key]
1 | student ={ |
2 | 'stud0001':'Mike', |
3 | 'stud0002':'Jenny', |
4 | 'stud0003':'Tom', |
5 | 'stud0004':'Bob', |
6 | } |
7 | |
8 | del student['stud0001'] |
9 | |
10 | print(student) |
11 | |
12 | ---------------執行結果--------------- |
13 | {'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob'} |
- dict.pop()
dict.pop(key)
1
student ={
2
'stud0001':'Mike',
3
'stud0002':'Jenny',
4
'stud0003':'Tom',
5
'stud0004':'Bob',
6
}
7
8
student.pop('stud0001') # 一定要指定一個key,不指定就會報錯
9
10
print(student)
11
---------------執行結果---------------
12
{'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob'}
- dict.popitem
dict.popitem() 沒有key隨機刪除
1
student ={
2
'stud0001':'Mike',
3
'stud0002':'Jenny',
4
'stud0003':'Tom',
5
'stud0004':'Bob',
6
}
7
8
student.popitem()
9
10
print(student)
11
---------------執行結果---------------
12
{'stud0001': 'Mike', 'stud0002': 'Jenny', 'stud0003': 'Tom'}
字典測試
如果不確定 這個 key 是否存在,我們可以使用 in
。
1 | student ={ |
2 | 'stud0001':'Mike', |
3 | 'stud0002':'Jenny', |
4 | 'stud0003':'Tom', |
5 | 'stud0004':'Bob', |
6 | } |
7 | |
8 | print(student) |
9 | print('stud0001' in student) |
10 | print('stud0005' in student) |
11 | |
12 | ---------------執行結果--------------- |
13 | {'stud0001': 'Mike', 'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob'} |
14 | True |
15 | False |
字典 Update
我們可以使用 .update() 來更新我們的字典
1 | student ={ |
2 | 'stud0001':'Mike', |
3 | 'stud0002':'Jenny', |
4 | 'stud0003':'Tom', |
5 | 'stud0004':'Bob', |
6 | } |
7 | |
8 | new_stduent={ |
9 | 'stud0001':'Jack', |
10 | 'stud0005':'Curry', |
11 | } |
12 | |
13 | student.update(new_stduent) |
14 | print(student) |
15 | |
16 | ---------------執行結果--------------- |
17 | {'stud0001': 'Jack', 'stud0002': 'Jenny', 'stud0003': 'Tom', 'stud0004': 'Bob', 'stud0005': 'Curry'} |
student、new_student 都有 ‘stud001’ 這個 key,所以 student 原來的 value 就被覆蓋,
而 student 原本沒有 ‘stud0005’ 所以被建立了。
字典 print
1 | student ={ |
2 | 'stud0001':'Mike', |
3 | 'stud0002':'Jenny', |
4 | 'stud0003':'Tom', |
5 | 'stud0004':'Bob', |
6 | } |
7 | |
8 | for i in student: |
9 | print(i) |
10 | ---------------執行結果--------------- |
11 | stud0001 |
12 | stud0002 |
13 | stud0003 |
14 | stud0004 |
ㄜ……怎麼只有 key,那怎麼 print value?
1 | student ={ |
2 | 'stud0001':'Mike', |
3 | 'stud0002':'Jenny', |
4 | 'stud0003':'Tom', |
5 | 'stud0004':'Bob', |
6 | } |
7 | |
8 | for i in student: |
9 | print(i,student[i]) |
10 | ---------------執行結果--------------- |
11 | stud0001 Mike |
12 | stud0002 Jenny |
13 | stud0003 Tom |
14 | stud0004 Bob |