iT邦幫忙

0

Python {dictionaries 字典} Dict Comprehension

  • 分享至 

  • xImage
  •  

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')

Dict Comprehension 進階建立字典方式

{key: value for item in iterable if condition}
{key: value運算 for key,value in 內容 if條件}

1. 使用字典生成式轉換現有字典的值

# 原始字典
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}

2. 過濾條件建立字典

可以使用條件來篩選數據,只建立滿足條件的鍵值對。例如,只保留成績高於 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}

3. 嵌套字典生成式

如果你有巢狀結構的資料,例如有多班學生成績,可以使用字典生成式處理巢狀結構。例如,我們將每個班級的成績提升 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}}

4. 使用字典生成式來翻轉字典

翻轉字典是指把原來字典的「鍵」和「值」對調。假設有一個包含學生姓名和 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'}

5. 根據計算結果動態生成字典

字典生成式可以用來計算值。例如,我們想要生成一個數字及其平方的字典:

# 生成 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()?

使用 setdefault() 可以減少多餘的 if 檢查,特別是在更新嵌套結構(如列表或字典)時。例如:

# 使用 setdefault() 設置嵌套字典
data = {}

# 如果 'user1' 不存在,則添加並設置 'age' 的值
data.setdefault('user1', {}).setdefault('age', 30)

print(data)  # 輸出: {'user1': {'age': 30}}

setdefault() 簡化了檢查並設置默認值的過程,幫助編寫更清晰、簡潔的代碼。

get() 是 Python 字典(dict)中的一個函式方法

與直接用鍵索引的方式(如 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

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言