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.
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 −
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)
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)
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ó.
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'}}
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().
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
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
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.
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'}}
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.
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