dict (字典)
最常用的內置數據結構之一,用於存儲鍵值對(key-value pairs)
字典是可變的、無序的(Python 3.7+ 後插入順序被保留),並且鍵必須是唯一的且不可變的(如字串、數字、元組等)
特性:
- 鍵必須是唯一的:如果重複鍵,後面的值會覆蓋前面的值
- 鍵必須是不可變的:鍵可以是字串、數字、元組等不可變類型,但不能是列表或字典等可變類型
- 值可以是任意類型:值可以是字串、數字、列表、字典等
- 無序性(Python 3.6 之前):在 Python 3.6 之前,字典是無序的。從 Python 3.7 開始,字典會保留插入順序
建立 dict
1 2 3 4 5 6 7 8 9 10 11 12 |
# 使用花括號 {} my_dict = {'name': 'Alice', 'age': 25} # 使用 dict() 函數 my_dict = dict(name='Alice', age=25) # 從鍵值對列表創建 my_dict = dict([('name', 'Alice'), ('age', 25)]) # 使用字典推導式 my_dict = {x: x**2 for x in range(5)} # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} |
常用方法 (python 3.11)
keys()
返回字典中所有鍵的視圖
1 2 3 |
my_dict = {'name': 'Alice', 'age': 25} keys = my_dict.keys() print(keys) # dict_keys(['name', 'age']) |
values()
返回字典中所有值的視圖
1 2 3 |
my_dict = {'name': 'Alice', 'age': 25} values = my_dict.values() print(values) # dict_values(['Alice', 25]) |
items()
返回字典中所有鍵值對的視圖
1 2 3 |
my_dict = {'name': 'Alice', 'age': 25} items = my_dict.items() print(items) # dict_items([('name', 'Alice'), ('age', 25)]) |
get(key[, default])
如果 key 存在於字典中則傳回 key 的值,否則傳回 default
如果 default 未給出則預設為 None,因而此方法絕不會引發 KeyError
1 2 3 |
my_dict = {'name': 'Alice', 'age': 25} print(my_dict.get('name')) # Alice print(my_dict.get('address', 'Not Found')) # Not Found |
update([other])
將另一個字典或鍵值對更新到當前字典中。如果鍵已存在,則覆蓋其值
1 2 3 |
my_dict = {'name': 'Alice', 'age': 25} my_dict.update({'age': 26, 'address': 'Taipei'}) print(my_dict) # {'name': 'Alice', 'age': 26, 'address': 'Taipei'} |
pop(key[, default])
刪除並返回指定鍵對應的值。如果鍵不存在且未提供默認值,則拋出 KeyError
1 2 3 4 |
my_dict = {'name': 'Alice', 'age': 25} age = my_dict.pop('age') print(age) # 25 print(my_dict) # {'name': 'Alice'} |
popitem()
刪除並返回字典中最後插入的鍵值對(Python 3.7+ 後字典保留插入順序)。如果字典為空,則拋出 KeyError
1 2 3 4 |
my_dict = {'name': 'Alice', 'age': 25} key, value = my_dict.popitem() print(key, value) # age 25 print(my_dict) # {'name': 'Alice'} |
clear()
清空字典中的所有鍵值對
1 2 3 |
my_dict = {'name': 'Alice', 'age': 25} my_dict.clear() print(my_dict) # {} |
copy()
返回字典的淺拷貝
1 2 3 |
my_dict = {'name': 'Alice', 'age': 25} new_dict = my_dict.copy() print(new_dict) # {'name': 'Alice', 'age': 25} |
setdefault(key[, default])
如果鍵存在,則返回其值;如果鍵不存在,則插入鍵並設置默認值
1 2 3 4 5 6 7 |
my_dict = {'name': 'Alice', 'age': 25} age = my_dict.setdefault('age', 30) # 鍵已存在,返回當前值 print(age) # 25 address = my_dict.setdefault('address', 'Taipei') # 鍵不存在,插入並返回默認值 print(address) # Taipei print(my_dict) # {'name': 'Alice', 'age': 25, 'address': 'Taipei'} |
fromkeys(iterable[, value])
從可迭代對象創建一個新字典,並將所有鍵的值設置為指定的默認值
1 2 3 |
keys = ['name', 'age', 'address'] my_dict = dict.fromkeys(keys, 'Unknown') print(my_dict) # {'name': 'Unknown', 'age': 'Unknown', 'address': 'Unknown'} |
常用操作:
len(dict)
返回字典中鍵值對的數量
1 2 |
my_dict = {'name': 'Alice', 'age': 25} print(len(my_dict)) # 2 |
in 操作符
檢查鍵是否存在於字典中
1 2 3 |
my_dict = {'name': 'Alice', 'age': 25} print('name' in my_dict) # True print('address' in my_dict) # False |
遍歷
遍歷鍵/值/鍵值對
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 遍歷鍵 for key in my_dict: print(key) for key in my_dict.keys(): print(key) # 遍歷值 for value in my_dict.values(): print(value) # 遍歷鍵值 for key, value in my_dict.items(): print(key, value) |