📖 12.1 Dictionary - Từ điển Python
📖 Giới thiệu
Dictionary (từ điển) là kiểu dữ liệu lưu trữ theo cặp key-value (khóa-giá trị). Mỗi key là duy nhất và được dùng để truy cập value tương ứng. Dictionary rất hữu ích để lưu trữ thông tin có cấu trúc.
Mục tiêu bài học:
- Hiểu khái niệm key-value trong dictionary
- Biết cách tạo và truy cập dictionary
- Ứng dụng dictionary lưu trữ thông tin
🔧 Cú pháp
Tạo dictionary:
python
# Cách 1: Dùng {}
hoc_sinh = {
"ten": "An",
"tuoi": 16,
"lop": "10A"
}
# Cách 2: Dùng dict()
diem = dict(toan=8, van=7, anh=9)Truy cập và thay đổi:
python
# Truy cập value
ten = hoc_sinh["ten"]
# Thay đổi value
hoc_sinh["tuoi"] = 17
# Thêm key mới
hoc_sinh["que"] = "Hà Nội"🔬 Phân tích & Giải thích chi tiết
1. 📖 Dictionary cơ bản
python
# Thông tin một người
nguoi = {
"ho": "Nguyễn",
"ten": "An",
"tuoi": 20,
"que_quan": "Hà Nội"
}
# Truy cập thông tin
print(f"Họ: {nguoi['ho']}")
print(f"Tên: {nguoi['ten']}")
print(f"Tuổi: {nguoi['tuoi']}")
print(f"Quê: {nguoi['que_quan']}")2. ➕ Thêm, sửa, xóa
python
diem_so = {
"toan": 8,
"van": 7
}
print(f"Ban đầu: {diem_so}")
# Thêm môn mới
diem_so["anh"] = 9
print(f"Thêm môn Anh: {diem_so}")
# Sửa điểm
diem_so["van"] = 8
print(f"Sửa điểm Văn: {diem_so}")
# Xóa môn
del diem_so["toan"]
print(f"Xóa môn Toán: {diem_so}")3. 🔍 Kiểm tra key
python
mon_hoc = {
"toan": "Toán học",
"ly": "Vật lý",
"hoa": "Hóa học"
}
# Kiểm tra có key
if "toan" in mon_hoc:
print(f"Có môn: {mon_hoc['toan']}")
if "sinh" not in mon_hoc:
print("Không có môn Sinh")
# Dùng get() để tránh lỗi
sinh = mon_hoc.get("sinh", "Không có")
print(f"Môn Sinh: {sinh}")💻 Ví dụ minh họa
Ví dụ 1: Danh bạ điện thoại
python
# Danh bạ điện thoại
danh_ba = {
"mama": "0987654321",
"papa": "0912345678",
"ban_an": "0909123456",
"ban_binh": "0888777666"
}
print("📞 DANH BẠ ĐIỆN THOẠI")
print("=" * 25)
# Hiển thị danh bạ
for ten, sdt in danh_ba.items():
print(f"{ten.ljust(10)}: {sdt}")
print("-" * 25)
# Tìm số điện thoại
ten_tim = input("Tìm số của ai? ").lower()
if ten_tim in danh_ba:
sdt = danh_ba[ten_tim]
print(f"📱 Số của {ten_tim}: {sdt}")
else:
print("❌ Không tìm thấy trong danh bạ")
# Thêm số mới
ten_moi = input("\nThêm tên mới: ")
sdt_moi = input("Số điện thoại: ")
danh_ba[ten_moi.lower()] = sdt_moi
print(f"\n✅ Đã thêm {ten_moi}: {sdt_moi}")
print(f"Danh bạ hiện có {len(danh_ba)} số")Ví dụ 2: Bảng điểm học sinh
python
# Bảng điểm nhiều học sinh
bang_diem = {
"An": {"toan": 8, "van": 7, "anh": 9},
"Binh": {"toan": 6, "van": 8, "anh": 7},
"Chi": {"toan": 9, "van": 6, "anh": 8}
}
print("📊 BẢNG ĐIỂM LỚP")
print("=" * 30)
# Hiển thị bảng điểm
print(f"{'Tên':<8} {'Toán':<6} {'Văn':<6} {'Anh':<6} {'TB':<6}")
print("-" * 30)
for ten, diem in bang_diem.items():
toan = diem["toan"]
van = diem["van"]
anh = diem["anh"]
tb = (toan + van + anh) / 3
print(f"{ten:<8} {toan:<6} {van:<6} {anh:<6} {tb:<6.1f}")
print("-" * 30)
# Tìm học sinh có điểm TB cao nhất
hs_gioi_nhat = ""
diem_cao_nhat = 0
for ten, diem in bang_diem.items():
tb = sum(diem.values()) / len(diem)
if tb > diem_cao_nhat:
diem_cao_nhat = tb
hs_gioi_nhat = ten
print(f"🏆 Học sinh giỏi nhất: {hs_gioi_nhat} ({diem_cao_nhat:.1f} điểm)")
# Thống kê môn học
tong_toan = sum(hs["toan"] for hs in bang_diem.values())
tong_van = sum(hs["van"] for hs in bang_diem.values())
tong_anh = sum(hs["anh"] for hs in bang_diem.values())
so_hs = len(bang_diem)
print(f"\nĐiểm trung bình theo môn:")
print(f"📐 Toán: {tong_toan/so_hs:.1f}")
print(f"📖 Văn: {tong_van/so_hs:.1f}")
print(f"🌍 Anh: {tong_anh/so_hs:.1f}")Ví dụ 3: Đếm từ trong văn bản
python
# Đếm số lần xuất hiện của từ
van_ban = "python is fun python is easy python is powerful"
print("📝 ĐẾM TỪ TRONG VĂN BẢN")
print("=" * 30)
print(f"Văn bản: {van_ban}")
# Tách từ và đếm
tu_list = van_ban.split()
dem_tu = {}
for tu in tu_list:
if tu in dem_tu:
dem_tu[tu] += 1
else:
dem_tu[tu] = 1
print(f"\nKết quả đếm:")
print("-" * 15)
# Sắp xếp theo số lần xuất hiện
for tu, so_lan in sorted(dem_tu.items(), key=lambda x: x[1], reverse=True):
print(f"{tu:<10}: {so_lan} lần")
print(f"\nTổng cộng: {len(dem_tu)} từ khác nhau")
# Từ xuất hiện nhiều nhất
tu_nhieu_nhat = max(dem_tu, key=dem_tu.get)
print(f"Từ xuất hiện nhiều nhất: '{tu_nhieu_nhat}' ({dem_tu[tu_nhieu_nhat]} lần)")🏋️ Thực hành
Bài tập 1: Thông tin cá nhân
python
# Tạo dictionary thông tin
thong_tin = {
"ten": "Minh",
"tuoi": 18,
"lop": "12A"
}
print(f"Tên: {thong_tin['ten']}")
print(f"Tuổi: {thong_tin['tuoi']}")
print(f"Lớp: {thong_tin['lop']}")Bài tập 2: Điểm môn học
python
# Dictionary điểm số
diem = {"toan": 8, "van": 7, "anh": 9}
# Tính điểm trung bình
tong = sum(diem.values())
tb = tong / len(diem)
print(f"Điểm TB: {tb:.1f}")Bài tập 3: Đếm ký tự
python
# Đếm ký tự trong chuỗi
text = "hello"
dem = {}
for char in text:
if char in dem:
dem[char] += 1
else:
dem[char] = 1
print(f"Đếm ký tự: {dem}")📋 Tóm tắt
Cấu trúc dictionary:
python
dict = {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}Thao tác cơ bản:
| Thao tác | Cú pháp | Ví dụ |
|---|---|---|
| Truy cập | dict[key] | dict["ten"] |
| Thêm/Sửa | dict[key] = value | dict["tuoi"] = 20 |
| Xóa | del dict[key] | del dict["que"] |
| Kiểm tra | key in dict | "ten" in dict |
Phương thức hữu ích:
| Phương thức | Chức năng | Ví dụ |
|---|---|---|
| keys() | Lấy tất cả key | dict.keys() |
| values() | Lấy tất cả value | dict.values() |
| items() | Lấy cặp key-value | dict.items() |
| get() | Truy cập an toàn | dict.get("key", "default") |
Ứng dụng thực tế:
- Lưu thông tin: Hồ sơ cá nhân, cấu hình
- Đếm số lượng: Từ, ký tự, sự kiện
- Mapping: Mã → Tên, ID → Thông tin
- Cache: Lưu kết quả tính toán
Lưu ý quan trọng:
- Key phải hashable: String, số, tuple (không list)
- Key duy nhất: Không có key trùng lặp
- Value bất kỳ: Số, string, list, dict...
- Không có thứ tự: (Python < 3.7)
Chuẩn bị cho bài tiếp theo:
Bài tiếp theo sẽ học về 🔄 Duyệt và xử lý dictionary!
💡 Mẹo: Dictionary giống như danh bạ điện thoại - tên là key, số là value!
📖 Thực hành: Thử tạo dictionary lưu thông tin bạn bè!