Python - Nested Dictionaries

Nested Dictionaries

Từ điển lồng nhau trong Python đề cập đến các từ điển được lưu trữ dưới dạng giá trị trong một dictionary . Nói cách khác, một từ điển có thể chứa các từ điển khác làm giá trị của nó, tạo thành một cấu trúc phân cấp hoặc lồng nhau.

Các từ điển lồng nhau có thể được sửa đổi, cập nhật hoặc mở rộng theo cách tương tự như các từ điển thông thường. Bạn có thể thêm, xóa hoặc cập nhật các cặp khóa-giá trị ở bất kỳ cấp độ nào của cấu trúc lồng nhau.

Creating a Nested Dictionary in Python

Chúng ta có thể tạo một từ điển lồng nhau trong Python bằng cách định nghĩa một từ điển mà trong đó giá trị của một số khóa là chính các từ điển. Điều này cho phép tạo ra một cấu trúc phân cấp, trong đó mỗi cặp khóa-giá trị đại diện cho một cấp độ thông tin lồng nhau. Điều này có thể đạt được theo nhiều cách khác nhau −

Example: Direct Assignment

Trong cách tiếp cận này, chúng ta có thể gán trực tiếp các từ điển làm giá trị cho các khóa bên ngoài trong một định nghĩa từ điển duy nhất.

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

Example: Using a Loop

Với phương pháp này, một từ điển ngoài rỗng được khởi tạo, sau đó được điền bằng các từ điển làm giá trị thông qua một vòng lặp để xác định các từ điển lồng nhau.

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

Adding Items to a Nested Dictionary in Python

Khi một từ điển lồng nhau được tạo ra, chúng ta có thể thêm các mục vào nó bằng cách truy cập vào từ điển lồng nhau cụ thể thông qua khóa của nó và sau đó gán một cặp khóa-giá trị mới cho nó.

Example

Trong ví dụ sau, chúng ta đang định nghĩa một từ điển lồng nhau "students" trong đó mỗi khóa đại diện cho tên của một học sinh và giá trị của nó là một từ điển khác chứa thông tin về học sinh đó.

Sau đó, chúng ta thêm một cặp khóa-giá trị mới vào từ điển lồng của Alice và thêm một từ điển lồng mới cho một sinh viên mới, 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)

Nó sẽ tạo ra đầu ra sau đây −

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

Accessing Items of a Nested Dictionary in Python

Truy cập các mục của một từ điển lồng nhau trong Python đề cập đến việc lấy giá trị được lưu trữ trong cấu trúc lồng nhau bằng cách sử dụng một chuỗi các khóa. Mỗi khóa tương ứng với một cấp trong hệ thống phân cấp của từ điển.

Chúng ta có thể đạt được điều này thông qua việc truy cập trực tiếp bằng cách sử dụng dấu ngoặc vuông hoặc bằng cách sử dụng phương thức get().

Example: Using Direct Indexing

Trong cách tiếp cận này, chúng ta truy cập các giá trị trong một từ điển lồng bằng cách chỉ định từng khóa trong một chuỗi dấu ngoặc vuông. Mỗi khóa trong chuỗi này tham chiếu đến một cấp độ trong từ điển lồng, tiến sâu hơn một cấp độ với mỗi khóa.

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

Dưới đây là kết quả của đoạn mã trên −

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

Example: Using the get() Method

Phương thức get() được sử dụng để lấy giá trị liên kết với khóa được chỉ định. Nếu khóa không tồn tại, nó sẽ trả về một giá trị mặc định (mặc định là None nếu không được chỉ định) −

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

Đầu ra của đoạn mã trên như sau −

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

Deleting a Dictionary from a Nested Dictionary

Chúng ta có thể xóa các từ điển từ một từ điển lồng nhau bằng cách sử dụng từ khóa del . Từ khóa này cho phép chúng ta loại bỏ một cặp khóa-giá trị cụ thể từ từ điển lồng nhau.

Example

Trong ví dụ sau, chúng ta xóa từ điển lồng nhau cho "Bob" khỏi từ điển "students" bằng cách sử dụng câu lệnh del −

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

Chúng ta nhận được đầu ra như hình dưới đây −

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

Iterating Through a Nested Dictionary in Python

Lặp qua một từ điển lồng nhau đề cập đến việc lặp qua các khóa và giá trị ở mỗi cấp độ của từ điển. Điều này cho phép bạn truy cập và thao tác các mục bên trong cấu trúc lồng nhau.

Chúng ta có thể lặp qua một từ điển lồng nhau bằng cách sử dụng các vòng lặp lồng nhau. Vòng lặp ngoài lặp qua các khóa và giá trị của từ điển chính, trong khi vòng lặp bên trong lặp qua các khóa và giá trị của các từ điển lồng nhau.

Example

Trong ví dụ này, chúng ta đang lặp qua từ điển "students", lấy tên của từng sinh viên và các thông tin tương ứng của họ bằng cách lặp qua các từ điển lồng nhau.

# 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}")

Đầu ra thu được như hình dưới đây −

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