字典集合

Python SELF TW
等級 11 , 課堂 1
開放

1.1 字典及其屬性

字典 (dictionary) 在 Python 中是一種 有序的鍵值對集合,每個鍵都必須是唯一的。字典是 Python 中最靈活且強大的數據類型之一,用於儲存和管理數據。我們會非常頻繁地使用它們,幾乎就像列表一樣頻繁。很快你就會相信這一點 :)

字典的主要屬性:

1. 唯一鍵

字典中的每個鍵必須是唯一的。如果字典中添加了一個已存在鍵的鍵值對,那麼舊的值將被新的值替換。例如,如果你想儲存學生資料並使用他們的ID作為鍵:


students = {"123": "John", "124": "Alice", "123": "Mike"}
print(students)  # 輸出: {'123': 'Mike', '124': 'Alice'}

2. 有序性

重要! 在 Python 3.7 之前,字典是無序的集合,元素的順序不保證。從 Python 3.7 開始,字典保留了元素添加的順序,但這點直到 Python 3.8 才成為語言規範的標準。

那是5年前的事了。我們學習的是 Python 3.12 的版本,所以你可以放心地將字典視為一個 有序的元素集合

3. 可變性

字典是可變的,這意味著在創建字典後,你可以添加、修改或刪除元素。例如,添加一個學生的地址:


student = {"name": "John", "age": 20}
student["address"] = "123 Main St"
print(student)  # 輸出: {'name': 'John', 'age': 20, 'address': '123 Main St'}

4. 效率

字典經過優化,能快速查找、添加和刪除鍵值對。平均來說,查找、添加和刪除操作的時間複雜度為 O(1)。至於什麼是算法的時間複雜度,我們稍後將在「算法和數據結構」主題中學習。

5. 鍵和值

字典中的鍵可以是任何不可變的數據類型,如字符串、數字或元組。值可以是任何數據類型,包括其他字典。

6. 訪問和修改方法

字典支持各種方法來訪問元素,添加、修改和刪除鍵值對。其中包括 get(), keys(), values(), items(), update(), pop()等方法。詳細的我們會在以後的講座中討論。

7. 遍歷元素

你可以通過循環遍歷字典中的鍵、值或鍵值對。這使得對字典元素進行操作變得非常簡單。例如:


student = {"name": "John", "age": 20, "address": "123 Main St"}
for key, value in student.items():
    print(f"{key}: {value}")

輸出將是:

name: John
age: 20
address: 123 Main St

8. 鍵的可哈希性

字典中的鍵必須是可哈希的。 這意味著鍵必須有一個在其生命週期中不變的哈希值。哈希值由一個哈希函數獲得,這是一種將任意長度的輸入轉換為固定長度輸出的算法。這就是哈希值或哈希碼的由來。不可變的數據類型,如字符串、數字和元組,是可哈希的,並且可以用作鍵。

我們將在「算法和數據結構」主題中深入研究哈希函數和哈希性。

1.2 使用 {} 創建字典

在 Python 中可以通過多種方式創建字典。以下是一些創建字典對象的方法和示例:

使用大括號 {}

創建字典最常見的方法是使用包含鍵值對並用逗號分隔的大括號。鍵值對本身由冒號分隔。


# 創建空字典
empty_dict = {}

# 創建字典並添加元素
person = {
    "name": "John",
    "age": 30,
    "city": "New York"
}
print(type(person))
print(person)

重要! 創建字典類似於創建集合。從某種意義上看,可以將字典視為由鍵組成的集合,這些鍵連接著值。

如果大括號中只列出了「鍵」,則創建的是集合;如果鍵後面有冒號並指定了值,則創建的是字典。空的大括號始終是字典。


# 創建空字典
empty_dict = {}

# 創建包含元素的集合
unique_items = {
    "name",
    "age",
    "city"
}
print(type(unique_items))
print(unique_items)

1.3 使用 dict()函數創建字典

dict()函數可以從鍵值對序列或命名參數創建字典。

鍵值對序列示例:


# 從元組列表創建字典
person = dict([("name", "John"), ("age", 30), ("city", "New York")])
print(person)

命名參數示例。不需要額外的括號:


# 使用命名參數創建字典
person = dict(name="John", age=30, city="New York")
print(person)

使用 dict.fromkeys()方法

fromkeys()方法使用給定的鍵和默認值創建字典。


# 用鍵和默認值創建字典
keys = ["name", "age", "city"]
default_value = None
person = dict.fromkeys(keys, default_value) 
print(person)

字典會有三個鍵,但它們都有相同的值。

1.4 從現有變數創建字典

可以使用變數作為鍵和值創建字典。


# 從變數創建字典
name = "John"
age = 30
city = "New York"

person = {"name": name, "age": age, "city": city}
print(person)

1.5 使用字典生成器

字典生成器允許使用類似列表生成器的簡潔語法創建字典。


# 使用字典生成器創建字典
squares = {x: x**2 for x in range(1, 6)}
print(squares)

1.6 訪問字典中的值

使用 []語法獲取鍵對應的值:


# 訪問字典中的值
person = {"name": "John", "age": 30, "city": "New York"}
print(person["name"])  # 輸出: John

重要! 如果找不到鍵,會拋出KeyError錯誤。為了避免這種情況,可以使用get()方法,該方法會返回鍵對應的值,如果不存在該鍵,則返回None(或其他默認值)。


# 使用 get() 方法訪問字典中的值
person = {"name": "John", "age": 30, "city": "New York"}
print(person.get("name"))  # 輸出: John
print(person.get("address", "找不到地址"))  # 輸出: 找不到地址

1.7 更改字典中的值

可以通過鍵訪問字典中的值並賦予它們新的值來進行更改。


# 更改字典中的值
person = {"name": "John", "age": 30, "city": "New York"}
person["age"] = 31
print(person)  # 輸出: {'name': 'John', 'age': 31, 'city': 'New York'}

1.8 刪除字典中的元素

可以使用 del 操作符或pop()方法刪除元素。


# 使用 del 刪除元素
person = {"name": "John", "age": 30, "city": "New York"}
del person["age"]
print(person)  # 輸出: {'name': 'John', 'city': 'New York'}

# 使用 pop() 刪除元素
person = {"name": "John", "age": 30, "city": "New York"}
age = person.pop("age")
print(person)  # 輸出: {'name': 'John', 'city': 'New York'}
print(age)     # 輸出: 30

1.9 檢查字典中是否存在鍵

可以使用 in 操作檢查字典中是否包含某個鍵。


# 檢查字典中是否存在鍵
person = {"name": "John", "age": 30, "city": "New York"}
print("name" in person)  # 輸出: True
print("address" in person)  # 輸出: False

1.10 遍歷字典中的元素

可以遍歷字典中的鍵、值或鍵值對:


# 遍歷字典中的鍵
person = {"name": "John", "age": 30, "city": "New York"}
for key in person:
    print(key)

# 遍歷字典中的值
for value in person.values():
    print(value)

# 遍歷字典中的鍵值對
for key, value in person.items():
    print(f"{key}: {value}")

1.11 字典在實際任務中的應用示例

讓我們看一些在實際生活中使用字典可能有幫助的例子:

例1:計算文本中單詞的頻率

假設我們有一段文本,我們想知道每個單詞在其中出現了多少次。


text = "hello world hello"
word_count = {}
for word in text.split():
    if word in word_count:
        word_count[word] += 1
    else:
        word_count[word] = 1
print(word_count)  # 輸出: {'hello': 2, 'world': 1}

例2:學生資料儲存

我們可以使用字典來儲存學生資料,其中鍵是他們的學號,值是他們的詳細資料。


students = {
    "123": {"name": "John", "age": 20, "major": "Computer Science"},
    "124": {"name": "Alice", "age": 22, "major": "Mathematics"}
}
print(students["123"]["name"])  # 輸出: John

例3:電話簿

可以使用字典創建一個簡單的電話簿,其中鍵是名字,值是電話號碼。


phone_book = {
    "John": "123-456-7890",
    "Alice": "987-654-3210"
}
print(phone_book["Alice"])  # 輸出: 987-654-3210
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION