Python - 嵌套字典

你好,有抱負的編程者!今天,我們將深入探究 Python 中嵌套字典的迷人世界。如果你是编程新手,不必擔心 - 我會一步一步引導你了解這個主題,就像我這些年教學無數學生一樣。所以,拿起你最喜欢的飲料,放鬆一下,讓我們一起踏上這次 Python 的冒險之旅!

Python - Nested Dictionaries

嵌套字典

嵌套字典是什麼?

想象你有一個大盒子(主字典),在這個盒子裡面有幾個小盒子(嵌套字典)。這些小盒子可以包含各種物品(鍵值對)。這基本上就是嵌套字典的含義 - 字典中的字典。

讓我們從一個簡單的例子開始:

student = {
"name": "Alice",
"age": 20,
"grades": {
"math": 95,
"science": 88,
"history": 92
}
}

在這個例子中,student是我們的主字典。它包含了關於 Alice 的基本信息,包括一個嵌套字典grades,它存儲了她不同科目的分數。

在 Python 中創建嵌套字典

創建嵌套字典與創建普通字典類似,但你要添加另一個字典作為值。讓我們創建一個更複雜的例子 - 學校目錄:

school = {
"Grade 9": {
"Alice": {
"age": 14,
"subjects": ["Math", "Science", "English"]
},
"Bob": {
"age": 15,
"subjects": ["History", "Art", "PE"]
}
},
"Grade 10": {
"Charlie": {
"age": 16,
"subjects": ["Physics", "Chemistry", "Biology"]
}
}
}

在這裡,我們有一個主字典school,它包含學年級別作為鍵。每個學年級別又是另一個包含學生姓名作為鍵的字典。然後每個學生都有自己的包含個人信息的字典。

在 Python 中向嵌套字典添加項目

向嵌套字典添加項目很直接。你可以添加新的鍵值對到現有的嵌套字典中,或者創建全新的嵌套字典。

讓我們向 Grade 10 添加一個新的學生:

school["Grade 10"]["Diana"] = {
"age": 15,
"subjects": ["Math", "Computer Science", "Literature"]
}

print(school["Grade 10"])

輸出:

{
'Charlie': {'age': 16, 'subjects': ['Physics', 'Chemistry', 'Biology']},
'Diana': {'age': 15, 'subjects': ['Math', 'Computer Science', 'Literature']}
}

我們也可以添加新的學年級別:

school["Grade 11"] = {
"Eve": {
"age": 17,
"subjects": ["Economics", "Psychology", "French"]
}
}

print(school.keys())

輸出:

dict_keys(['Grade 9', 'Grade 10', 'Grade 11'])

在 Python 中訪問嵌套字典的項目

要訪問嵌套字典中的項目,我們使用多個方括號,每個方括號代表一個嵌套層次。讓我們從我們的school字典中检索一些信息:

# 獲取 Alice 的年齡
alice_age = school["Grade 9"]["Alice"]["age"]
print(f"Alice's age: {alice_age}")

# 獲取 Charlie 的科目
charlie_subjects = school["Grade 10"]["Charlie"]["subjects"]
print(f"Charlie's subjects: {charlie_subjects}")

輸出:

Alice's age: 14
Charlie's subjects: ['Physics', 'Chemistry', 'Biology']

記住,如果你不確定你的嵌套字典的結構,你可以 always 使用get()方法避免KeyError異常:

# 試圖獲取不存在的學生
frank_age = school.get("Grade 9", {}).get("Frank", {}).get("age", "Not found")
print(f"Frank's age: {frank_age}")

輸出:

Frank's age: Not found

從嵌套字典中刪除字典

要刪除嵌套字典,我們使用del關鍵字。讓我們從 Grade 9 中刪除 Bob:

del school["Grade 9"]["Bob"]
print(school["Grade 9"])

輸出:

{'Alice': {'age': 14, 'subjects': ['Math', 'Science', 'English']}}

刪除嵌套字典中的項目時要小心。始终确保鍵存在以避免KeyError異常。

在 Python 中迭代嵌套字典

迭代嵌套字典需要嵌套循環。讓我們打印出我們school字典中的所有信息:

for grade, students in school.items():
print(f"\n{grade}:")
for student, info in students.items():
print(f"  {student}:")
for key, value in info.items():
print(f"    {key}: {value}")

輸出:

Grade 9:
Alice:
age: 14
subjects: ['Math', 'Science', 'English']

Grade 10:
Charlie:
age: 16
subjects: ['Physics', 'Chemistry', 'Biology']
Diana:
age: 15
subjects: ['Math', 'Computer Science', 'Literature']

Grade 11:
Eve:
age: 17
subjects: ['Economics', 'Psychology', 'French']

這個嵌套循環結構使我們能夠訪問和打印出我們嵌套字典的所有層次。

處理嵌套字典的方法

以下是處理嵌套字典的一些有用方法:

方法 描述
dict.items() 返回包含字典鍵值對的視圖對象
dict.keys() 返回包含字典鍵的視圖對象
dict.values() 返回包含字典值的視圖對象
dict.get(key, default) 如果存在則返回指定鍵的值,否則返回默認值
dict.update(other_dict) 使用另一個字典或鍵值對可迭代元素更新字典
dict.pop(key, default) 刪除並返回指定鍵的值。如果鍵不存在,則返回默認值

請記住,這些方法可以應用於嵌套字典的任何層次。

現在,你就擁有了它,我親愛的學生們!我們已經探究了 Python 中嵌套字典的所有知識。從創建和添加項目到訪問、刪除和迭代,你现在擁有了這些複雜數據結構的工作工具。

就像任何編程概念一樣,實踐是關鍵。嘗試創建自己的嵌套字典,也許是一個數字圖書館目錄或食譜書。你越多玩這些結構,你就會越來越舒服。

請記住,在編程的世界裡,錯誤只是學習的機會。所以不要害怕實驗和犯錯 - 這就是我們作為編程者成長的方式。繼續編程,繼續學習,最重要的是,享受 Python 的樂趣!

Credits: Image by storyset