dictionary 是 Python 中的一種內建資料結構,
用來存放鍵值對(key-value pairs)。
與列表不同,字典中的元素是無序的,每個元素由一個**鍵(key)和一個值(value)**組成,
鍵是唯一的,而值則可以是任何資料類型。
1.使用變數建立一個空字典my_dict = {}
2.或直接建立一個有值的字典
my_dict = {
"name": "Alice",
"age": 25,
"city": "New York"}
3.使用變數和函數dict()建立一個空字典my_dict = dict()
my_dict = dict(name='Alice', age=25, city='New York')
{key: value for item in iterable if condition}
{key: value運算 for key,value in 內容 if條件}
# 原始字典
students_scores = {"Alice": 75, "Bob": 80, "Charlie": 65}
# 使用進階字典生成式,將成績提升 10 分
updated_scores = {name: score + 10 for name, score in students_scores.items()}
print(updated_scores)
# Output: {'Alice': 85, 'Bob': 90, 'Charlie': 75}
可以使用條件來篩選數據,只建立滿足條件的鍵值對。例如,只保留成績高於 70 的學生。
# 原始字典
students_scores = {"Alice": 75, "Bob": 80, "Charlie": 65}
# 使用條件過濾出高於 70 的成績
passing_scores = {name: score for name, score in students_scores.items() if score > 70}
print(passing_scores)
# Output: {'Alice': 75, 'Bob': 80}
如果你有巢狀結構的資料,例如有多班學生成績,可以使用字典生成式處理巢狀結構。例如,我們將每個班級的成績提升 5 分:
# 巢狀結構的成績字典
classes_scores = {
"Class A": {"Alice": 75, "Bob": 80},
"Class B": {"Charlie": 65, "David": 90}
}
# 使用嵌套字典生成式將成績提升 5 分
updated_classes_scores = {
class_name: {name: score + 5 for name, score in scores.items()}
for class_name, scores in classes_scores.items()
}
print(updated_classes_scores)
# Output: {'Class A': {'Alice': 80, 'Bob': 85}, 'Class B': {'Charlie': 70, 'David': 95}}
翻轉字典是指把原來字典的「鍵」和「值」對調。假設有一個包含學生姓名和 ID 的字典,我們希望反轉它:
# 原始字典
student_ids = {"Alice": 1001, "Bob": 1002, "Charlie": 1003}
# 翻轉字典
reversed_dict = {id: name for name, id in student_ids.items()}
print(reversed_dict)
# Output: {1001: 'Alice', 1002: 'Bob', 1003: 'Charlie'}
字典生成式可以用來計算值。例如,我們想要生成一個數字及其平方的字典:
# 生成 1 到 5 的平方
squares = {num: num ** 2 for num in range(1, 6)}
print(squares)
# Output: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
my_dict = {name: Alice ,email:123@gmail.com, age:25, city:LA}
方法名稱 | 說明 | 範例 |
---|---|---|
my_dict.get("key", "default") |
獲取指定鍵的值,,若不存在則返回 None |
my_dict.get("name", 'not found') → Alice |
my_dict["key"] |
返回對應的值,若鍵不存在: 會引發 KeyError | print(my_dict["name"]) # 輸出: Alice |
dict[key] = value |
新增或修改鍵值對 | my_dict["age"] = 26 # 更新 age 的值為 26 |
del my_dict["city"] |
刪除指定鍵值對 | del my_dict["city"] # {name: Alice ,email:123@gmail.com, age:25 |
dict.pop(key, default) |
刪除指定鍵並返回其值,若鍵不存在則返回默認值 | my_dict.pop("email") # {name: Alice, age:25, city: LA} |
my_dict.keys() |
返回所有的鍵 | my_dict.keys() → dict_keys(['name', 'age']) |
my_dict.values() |
返回所有的值 | my_dict.values() → dict_values(['Alice', 26]) |
my_dict.items() |
返回所有的鍵值對 | my_dict.items() → dict_items([('name', 'Alice'), ('age', 26)]) |
my_dict.clear() |
清空字典 | my_dict.clear() → {} |
my_dict.pop(key) |
刪除指定鍵,並返回對應的值 | my_dict.pop("age") → 26 |
print(len(my_dict)) |
使用 len() 函數獲取字典中項目的數量 | print(len(my_dict)) # 輸出: 4 |
可以使用 in 關鍵字檢查某個鍵是否存在於字典中:
if "name" in my_dict:
print("Name is in the dictionary") # 輸出: Name is in the dictionary`
可以使用迴圈遍歷字典的鍵和值:
for key, value in my_dict.items():
print(f"{key}: {value}")
setdefault(key,default=None)
setdefault()
是 Python 字典(dict)中的一個方法,用來在字典中查找指定的鍵(key)。
如果該鍵已經存在,則返回鍵對應的值;如果該鍵不存在,則將該鍵和給定的默認值(default)加入字典,
並返回該默認值。dict.setdefault(key, default=None
setdefault() 簡化了檢查並設置默認值的過程,幫助編寫更清晰、簡潔的代碼。
# 範例字典
my_dict = {'name': 'Alice', 'age': 25}
# 情況1:鍵存在
# 'name' 已經存在於字典中,因此返回該鍵的值 'Alice'
result1 = my_dict.setdefault('name', 'Unknown')
print(result1) # 輸出: 'Alice'
print(my_dict) # 輸出: {'name': 'Alice', 'age': 25}
# 情況2:鍵不存在
# 'location' 不存在於字典中,因此將 'location': 'Unknown' 加入字典
result2 = my_dict.setdefault('location', 'Unknown')
print(result2) # 輸出: 'Unknown'
print(my_dict) # 輸出: {'name': 'Alice', 'age': 25, 'location': 'Unknown'}
使用 setdefault() 可以減少多餘的 if 檢查,特別是在更新嵌套結構(如列表或字典)時。例如:
# 使用 setdefault() 設置嵌套字典
data = {}
# 如果 'user1' 不存在,則添加並設置 'age' 的值
data.setdefault('user1', {}).setdefault('age', 30)
print(data) # 輸出: {'user1': {'age': 30}}
setdefault() 簡化了檢查並設置默認值的過程,幫助編寫更清晰、簡潔的代碼。
與直接用鍵索引的方式(如 dict[key])不同的是,get() 方法可以讓你在鍵不存在時返回一個自定義的默認值,而不會引發 KeyError 錯誤。
dictionary.get(key, default=None)
避免 KeyError:使用 get() 可以避免因鍵缺失而報錯,從而減少程序崩潰的風險。
指定默認值:在處理缺失鍵時可以提供一個默認值,這在數據處理和清洗中很常見。
# 建立一個字典
my_dict = {'name': 'Alice', 'age': 25}
# 情況 1:鍵存在
# 查找 'name' 鍵的值,因為存在於字典中,返回 'Alice'
result1 = my_dict.get('name')
print(result1) # 輸出: Alice
# 情況 2:鍵不存在,沒有指定默認值
# 查找 'location' 鍵,因為不存在於字典中,返回 None
result2 = my_dict.get('location')
print(result2) # 輸出: None
# 情況 3:鍵不存在,指定默認值
# 查找 'location' 鍵,因為不存在,返回指定的默認值 'Unknown'
result3 = my_dict.get('location', 'Unknown')
print(result3) # 輸出: Unknown