Python - Đối Tượng Dictionaries Lồng Nhau

Chào bạn đang tìm kiếm kiến thức! Hôm nay, chúng ta sẽ bơi lội vào thế giới thú vị của các đối tượng dictionaries lồng nhau trong Python. Đừng lo nếu bạn mới bắt đầu học lập trình - tôi sẽ hướng dẫn bạn qua chủ đề này bước به bước, giống như tôi đã làm cho hàng ngàn học sinh trong những năm dạy học. Vậy hãy lấy ly đồ uống yêu thích của bạn, thư giãn và hãy cùng nhau khám phá cuộc phiêu lưu Python này!

Python - Nested Dictionaries

Đối Tượng Dictionaries Lồng Nhau

Đối Tượng Dictionaries Lồng Nhau Là Gì?

Hãy tưởng tượng bạn có một chiếc hộp lớn (đây là dictionary chính), và bên trong hộp này có một số hộp nhỏ hơn (đây là các dictionary lồng nhau). Mỗi hộp nhỏ này có thể chứa các mặt hàng khác nhau (cặp khóa-giá trị). Đó chính là điều gì mà một dictionary lồng nhau - một dictionary nằm trong một dictionary khác.

Hãy bắt đầu với một ví dụ đơn giản:

sinh_vien = {
"ten": "Alice",
"tuoi": 20,
"diem": {
"toan": 95,
"khoa_hoc": 88,
"lich_su": 92
}
}

Trong ví dụ này, sinh_vien là dictionary chính của chúng ta. Nó chứa thông tin cơ bản về Alice, bao gồm một dictionary lồng nhau diem mà chứa điểm số của cô trong các môn học khác nhau.

Tạo Đối Tượng Dictionaries Lồng Nhau Trong Python

Việc tạo một dictionary lồng nhau tương tự như tạo một dictionary thông thường, nhưng bạn thêm một dictionary khác vào làm giá trị. Hãy tạo một ví dụ phức tạp hơn - một danh bạ trường học:

truong_hoc = {
"Lớp 9": {
"Alice": {
"tuoi": 14,
"mon_hoc": ["Toán", "Khoa học", "Tiếng Anh"]
},
"Bob": {
"tuoi": 15,
"mon_hoc": ["Lịch sử", "Nghệ thuật", "Thể dục"]
}
},
"Lớp 10": {
"Charlie": {
"tuoi": 16,
"mon_hoc": ["Vật lý", "Hóa học", "Sinh học"]
}
}
}

Ở đây, chúng ta có một dictionary chính truong_hoc, nó chứa các cấp lớp học làm khóa. Mỗi cấp lớp học lại có một dictionary chứa tên học sinh làm khóa. Mỗi học sinh sau đó có dictionary riêng của mình chứa thông tin cá nhân.

Thêm Mục Trong Đối Tượng Dictionaries Lồng Nhau Trong Python

Việc thêm mục vào dictionary lồng nhau rất đơn giản. Bạn có thể thêm một cặp khóa-giá trị mới vào một dictionary lồng nhau hiện có hoặc tạo một dictionary lồng nhau mới.

Hãy thêm một học sinh mới vào Lớp 10:

truong_hoc["Lớp 10"]["Diana"] = {
"tuoi": 15,
"mon_hoc": ["Toán", "Khoa học máy tính", "Văn học"]
}

print(truong_hoc["Lớp 10"])

Output:

{
'Charlie': {'tuoi': 16, 'mon_hoc': ['Vật lý', 'Hóa học', 'Sinh học']},
'Diana': {'tuoi': 15, 'mon_hoc': ['Toán', 'Khoa học máy tính', 'Văn học']}
}

Chúng ta cũng có thể thêm một cấp lớp học mới:

truong_hoc["Lớp 11"] = {
"Eve": {
"tuoi": 17,
"mon_hoc": ["Kinh tế", "Psycology", "Tiếng Pháp"]
}
}

print(truong_hoc.keys())

Output:

dict_keys(['Lớp 9', 'Lớp 10', 'Lớp 11'])

Truy Cập Các Mục Của Đối Tượng Dictionaries Lồng Nhau Trong Python

Để truy cập các mục trong dictionary lồng nhau, chúng ta sử dụng nhiều dấu ngoặc vuông, mỗi dấu đại diện cho một cấp độ lồng nhau. Hãy lấy một số thông tin từ dictionary truong_hoc của chúng ta:

# Lấy tuổi của Alice
tuoi_alice = truong_hoc["Lớp 9"]["Alice"]["tuoi"]
print(f"Tuổi của Alice: {tuoi_alice}")

# Lấy các môn học của Charlie
mon_hoc_charlie = truong_hoc["Lớp 10"]["Charlie"]["mon_hoc"]
print(f"Các môn học của Charlie: {mon_hoc_charlie}")

Output:

Tuổi của Alice: 14
Các môn học của Charlie: ['Vật lý', 'Hóa học', 'Sinh học']

Nhớ rằng, nếu bạn không chắc chắn về cấu trúc của dictionary lồng nhau của mình, bạn luôn có thể sử dụng phương thức get() để tránh ngoại lệ KeyError:

# Thử lấy một học sinh không tồn tại
tuoi_frank = truong_hoc.get("Lớp 9", {}).get("Frank", {}).get("tuoi", "Không tìm thấy")
print(f"Tuổi của Frank: {tuoi_frank}")

Output:

Tuổi của Frank: Không tìm thấy

Xóa Một Dictionary Khỏi Đối Tượng Dictionaries Lồng Nhau

Để loại bỏ một dictionary lồng nhau, chúng ta sử dụng từ khóa del. Hãy loại bỏ Bob khỏi Lớp 9:

del truong_hoc["Lớp 9"]["Bob"]
print(truong_hoc["Lớp 9"])

Output:

{'Alice': {'tuoi': 14, 'mon_hoc': ['Toán', 'Khoa học', 'Tiếng Anh']}}

Cẩn thận khi xóa các mục khỏi dictionary lồng nhau. Luôn đảm bảo rằng các khóa tồn tại để tránh ngoại lệ KeyError.

Lặp Qua Đối Tượng Dictionaries Lồng Nhau Trong Python

Việc lặp qua một dictionary lồng nhau yêu cầu các vòng lặp lồng nhau. Hãy in ra tất cả thông tin trong dictionary truong_hoc của chúng ta:

for cap_lop, hoc_sinh in truong_hoc.items():
print(f"\n{cap_lop}:")
for ten_hoc_sinh, thong_tin in hoc_sinh.items():
print(f"  {ten_hoc_sinh}:")
for key, value in thong_tin.items():
print(f"    {key}: {value}")

Output:

Lớp 9:
Alice:
tuoi: 14
mon_hoc: ['Toán', 'Khoa học', 'Tiếng Anh']

Lớp 10:
Charlie:
tuoi: 16
mon_hoc: ['Vật lý', 'Hóa học', 'Sinh học']
Diana:
tuoi: 15
mon_hoc: ['Toán', 'Khoa học máy tính', 'Văn học']

Lớp 11:
Eve:
tuoi: 17
mon_hoc: ['Kinh tế', 'Psycology', 'Tiếng Pháp']

Cấu trúc vòng lặp lồng này cho phép chúng ta truy cập và in ra tất cả các cấp độ của dictionary lồng nhau.

Các Phương Pháp Làm Việc Với Đối Tượng Dictionaries Lồng Nhau

Dưới đây là bảng các phương pháp hữu ích để làm việc với các dictionary lồng nhau:

Phương thức Mô tả
dict.items() Trả về một đối tượng xem chứa các cặp khóa-giá trị của dictionary
dict.keys() Trả về một đối tượng xem chứa các khóa của dictionary
dict.values() Trả về một đối tượng xem chứa các giá trị của dictionary
dict.get(key, default) Trả về giá trị cho khóa cụ thể nếu nó tồn tại, nếu không thì trả về giá trị mặc định
dict.update(other_dict) Cập nhật dictionary với các yếu tố từ dictionary khác hoặc các cặp khóa-giá trị khác
dict.pop(key, default) Loại bỏ và trả về giá trị cho khóa cụ thể. Nếu khóa không tồn tại, trả về giá trị mặc định

Nhớ rằng, các phương thức này có thể được áp dụng ở bất kỳ cấp độ nào của một dictionary lồng nhau.

Và đó là những gì tôi muốn chia sẻ, các bạn học sinh quý! Chúng ta đã khám phá đầy đủ về các dictionary lồng nhau trong Python. Từ việc tạo và thêm mục mới, truy cập, xóa và lặp qua chúng, bạn bây giờ đã có các công cụ để làm việc với các cấu trúc dữ liệu phức tạp này.

Như với bất kỳ khái niệm lập trình nào, việc thực hành là chìa khóa. Hãy thử tạo các dictionary lồng nhau của riêng bạn, có thể là một thư viện số hoặc một cuốn sách nấu ăn. Càng chơi với các cấu trúc này, bạn sẽ càng cảm thấy thoải mái.

Nhớ rằng, trong thế giới lập trình, lỗi là những cơ hội để học hỏi. Vì vậy đừng sợ thử nghiệm và gặp lỗi - đó là cách chúng ta tất cả đều lớn lên dưới vai trò lập trình viên. Hãy tiếp tục lập trình, tiếp tục học hỏi và nhất quan là, hãy tận hưởng Python!

Credits: Image by storyset