Skip to content

📖 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ácCú phápVí dụ
Truy cậpdict[key]dict["ten"]
Thêm/Sửadict[key] = valuedict["tuoi"] = 20
Xóadel dict[key]del dict["que"]
Kiểm trakey in dict"ten" in dict

Phương thức hữu ích:

Phương thứcChức năngVí dụ
keys()Lấy tất cả keydict.keys()
values()Lấy tất cả valuedict.values()
items()Lấy cặp key-valuedict.items()
get()Truy cập an toàndict.get("key", "default")

Ứng dụng thực tế:

  1. Lưu thông tin: Hồ sơ cá nhân, cấu hình
  2. Đếm số lượng: Từ, ký tự, sự kiện
  3. Mapping: Mã → Tên, ID → Thông tin
  4. Cache: Lưu kết quả tính toán

Lưu ý quan trọng:

  1. Key phải hashable: String, số, tuple (không list)
  2. Key duy nhất: Không có key trùng lặp
  3. Value bất kỳ: Số, string, list, dict...
  4. 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è!

🐍 Khóa học Python căn bản bằng tiếng Việt