Python - 巢狀字典



巢狀字典

Python 中的巢狀字典指的是儲存在另一個 字典 中的字典。換句話說,字典可以包含其他字典作為其值,形成一個分層或巢狀的結構。

巢狀字典可以像普通字典一樣修改、更新或擴充套件。您可以在巢狀結構的任何級別新增、刪除或更新鍵值對。

在 Python 中建立巢狀字典

我們可以在 Python 中建立巢狀字典,方法是定義一個字典,其中某些鍵的值本身就是字典。這允許建立分層結構,其中每個鍵值對錶示巢狀資訊的級別。這可以通過幾種方式實現 -

示例:直接賦值

在這種方法中,我們可以直接將字典作為值分配給單個字典定義中的外部鍵 -

# Define the outer dictionary
nested_dict = {
   "outer_key1": {"inner_key1": "value1", "inner_key2": "value2"},
   "outer_key2": {"inner_key3": "value3", "inner_key4": "value4"}
}
print(nested_dict)

示例:使用迴圈

使用此方法,初始化一個空的外層字典,然後使用迴圈將字典作為值填充到其中,以定義巢狀字典 -

# Define an empty outer dictionary
nested_dict = {}

# Add key-value pairs to the outer dictionary
outer_keys = ["outer_key1", "outer_key2"]
for key in outer_keys:
   nested_dict[key] = {"inner_key1": "value1", "inner_key2": "value2"}
print(nested_dict)

在 Python 中向巢狀字典新增項

建立巢狀字典後,我們可以透過使用其鍵訪問特定的巢狀字典,然後向其分配新的鍵值對來向其新增項。

示例

在以下示例中,我們定義了一個巢狀字典“students”,其中每個鍵表示學生的姓名,其值是另一個包含學生詳細資訊的字典。

然後,我們將一個新的鍵值對新增到 Alice 的巢狀字典中,併為一個新的學生 Charlie 新增一個新的巢狀字典 -

# Initial nested dictionary
students = {
    "Alice": {"age": 21, "major": "Computer Science"},
    "Bob": {"age": 20, "major": "Engineering"}
}

# Adding a new key-value pair to Alice's nested dictionary
students["Alice"]["GPA"] = 3.8

# Adding a new nested dictionary for a new student
students["Charlie"] = {"age": 22, "major": "Mathematics"}

print(students)

它將產生以下輸出 -

{'Alice': {'age': 21, 'major': 'Computer Science', 'GPA': 3.8}, 'Bob': {'age': 20, 'major': 'Engineering'}, 'Charlie': {'age': 22, 'major': 'Mathematics'}}

在 Python 中訪問巢狀字典的項

在 Python 中訪問巢狀字典的項是指透過使用一系列鍵來檢索儲存在巢狀結構中的值。每個鍵對應於字典層次結構中的一個級別。

我們可以透過使用方括號進行直接索引或使用 get() 方法來實現此目的

示例:使用直接索引

在這種方法中,我們透過在一系列方括號中指定每個鍵來訪問巢狀字典中的值。序列中的每個鍵都引用巢狀字典中的一個級別,隨著每個鍵的出現,深入一層 -

# Define a nested dictionary
students = {
    "Alice": {"age": 21, "major": "Computer Science"},
    "Bob": {"age": 20, "major": "Engineering"},
    "Charlie": {"age": 22, "major": "Mathematics"}
}

# Access Alice's major
alice_major = students["Alice"]["major"]
print("Alice's major:", alice_major) 

# Access Bob's age
bob_age = students["Bob"]["age"]
print("Bob's age:", bob_age) 

以下是上述程式碼的輸出 -

Alice's major: Computer Science
Bob's age: 20

示例:使用 get() 方法

get() 方法用於獲取與指定鍵關聯的值。如果鍵不存在,則返回預設值(如果未指定,則為 None) -

# Define a nested dictionary
students = {
    "Alice": {"age": 21, "major": "Computer Science"},
    "Bob": {"age": 20, "major": "Engineering"},
    "Charlie": {"age": 22, "major": "Mathematics"}
}

# Access Alice's major using .get()
alice_major = students.get("Alice", {}).get("major", "Not Found")
print("Alice's major:", alice_major)  

# Safely access a non-existing key using .get()
dave_major = students.get("Dave", {}).get("major", "Not Found")
print("Dave's major:", dave_major)  

上述程式碼的輸出如下 -

Alice's major: Computer Science
Dave's major: Not Found

從巢狀字典中刪除字典

我們可以使用del關鍵字從巢狀字典中刪除字典。此關鍵字允許我們從巢狀字典中刪除特定的鍵值對。

示例

在下面的示例中,我們使用del語句從“students”字典中刪除“Bob”的巢狀字典:

# Define a nested dictionary
students = {
    "Alice": {"age": 21, "major": "Computer Science"},
    "Bob": {"age": 20, "major": "Engineering"},
    "Charlie": {"age": 22, "major": "Mathematics"}
}

# Delete the dictionary for Bob
del students["Bob"]

# Print the updated nested dictionary
print(students)

我們得到如下所示的輸出:

{'Alice': {'age': 21, 'major': 'Computer Science'}, 'Charlie': {'age': 22, 'major': 'Mathematics'}}

在 Python 中迭代巢狀字典

迭代巢狀字典指的是遍歷字典每個級別的鍵和值。這允許您訪問和操作巢狀結構中的專案。

我們可以使用巢狀迴圈迭代巢狀字典。外迴圈迭代主字典的鍵和值,而內迴圈迭代巢狀字典的鍵和值。

示例

在這個例子中,我們正在迭代“students”字典,透過迭代巢狀字典來檢索每個學生的姓名及其相應的詳細資訊:

# Defining a nested dictionary
students = {
    "Alice": {"age": 21, "major": "Computer Science"},
    "Bob": {"age": 20, "major": "Engineering"},
    "Charlie": {"age": 22, "major": "Mathematics"}
}

# Iterating through the Nested Dictionary:
for student, details in students.items():
   print(f"Student: {student}")
   for key, value in details.items():
      print(f"  {key}: {value}")

獲得的輸出如下所示:

Student: Alice
  age: 21
major: Computer Science
Student: Bob
  age: 20
  major: Engineering
Student: Charlie
  age: 22
  major: Mathematics
廣告