
1. Nested Dictionary Là Gì?
Trong Python, nested dictionary (từ điển lồng nhau) là một dictionary chứa một hoặc nhiều dictionary bên trong nó. Điều này giúp tổ chức dữ liệu có cấu trúc phức tạp hơn, tương tự như một bảng dữ liệu có nhiều cấp độ.
Ví dụ về một nested dictionary:
sinh_vien = {
"SV001": {
"tên": "Nguyễn Văn A",
"tuổi": 20,
"điểm": {"toán": 8.5, "văn": 7.0, "anh": 9.0}
},
"SV002": {
"tên": "Trần Thị B",
"tuổi": 21,
"điểm": {"toán": 6.5, "văn": 8.0, "anh": 7.5}
}
}
2. Cách Truy Cập Dữ Liệu Trong Nested Dictionary
2.1. Truy Cập Giá Trị Trực Tiếp
Bạn có thể truy cập dữ liệu bằng cách sử dụng các key của dictionary.
print(sinh_vien["SV001"]["tên"]) # Kết quả: Nguyễn Văn A
print(sinh_vien["SV002"]["điểm"]["toán"]) # Kết quả: 6.5
2.2. Tránh Lỗi KeyError Khi Truy Cập Key Không Tồn Tại
Sử dụng phương thức .get()
để tránh lỗi khi key không tồn tại.
print(sinh_vien.get("SV003", "Không tìm thấy sinh viên")) # Kết quả: Không tìm thấy sinh viên
print(sinh_vien["SV001"].get("điểm", {}).get("hóa", "Không có điểm môn Hóa")) # Kết quả: Không có điểm môn Hóa
2.3. Sử Dụng Vòng Lặp Để Duyệt Từng Phần Tử
Dùng vòng lặp for
để duyệt qua các dictionary lồng nhau.
for ma_sv, thong_tin in sinh_vien.items():
print(f"Mã SV: {ma_sv}, Tên: {thong_tin['tên']}, Tuổi: {thong_tin['tuổi']}")
Kết quả:
Mã SV: SV001, Tên: Nguyễn Văn A, Tuổi: 20
Mã SV: SV002, Tên: Trần Thị B, Tuổi: 21
3. Cập Nhật Và Thêm Dữ Liệu Vào Nested Dictionary
3.1. Thêm Một Sinh Viên Mới
sinh_vien["SV003"] = {
"tên": "Phạm Văn C",
"tuổi": 19,
"điểm": {"toán": 9.0, "văn": 6.5, "anh": 8.0}
}
3.2. Cập Nhật Dữ Liệu
Giả sử cần cập nhật điểm môn Toán của sinh viên SV002:
sinh_vien["SV002"]["điểm"]["toán"] = 7.5
4. Xóa Phần Tử Trong Nested Dictionary
4.1. Xóa Một Key Bên Trong Dictionary
del sinh_vien["SV001"]["điểm"]["văn"] # Xóa điểm môn Văn của SV001
4.2. Xóa Một Sinh Viên
sinh_vien.pop("SV002", "Không tìm thấy sinh viên") # Xóa sinh viên SV002
5. Xử Lý Nested Dictionary Với Vòng Lặp Đệ Quy
Khi bạn không biết trước số cấp lồng nhau của dictionary, bạn có thể dùng đệ quy để duyệt hết dữ liệu.
def duyệt_dictionary(dic, cấp=0):
for key, value in dic.items():
print(" " * cấp * 4 + f"{key}: {value}" if not isinstance(value, dict) else f"{key}:")
if isinstance(value, dict):
duyệt_dictionary(value, cấp + 1)
duyệt_dictionary(sinh_vien)
Tổng Kết
✔ Truy cập dữ liệu: Dùng dict["key"]
, .get()
để tránh lỗi.
✔ Duyệt dữ liệu: Sử dụng vòng lặp for
.
✔ Cập nhật & thêm dữ liệu: Gán giá trị mới trực tiếp.
✔ Xóa dữ liệu: Dùng del
hoặc .pop()
.
✔ Duyệt tất cả dữ liệu: Dùng vòng lặp đệ quy nếu dictionary lồng nhau phức tạp.
Với các kiến thức trên, bạn có thể dễ dàng làm việc với nested dictionary trong Python một cách hiệu quả! 🚀