Python Dictionary Data Type (Kiểu dữ liệu từ điển trong Python)

1. Dictionary trong Python là gì?

Giải thích (tiếng Việt)

  • Dictionary (từ điển) là một kiểu dữ liệu lưu trữ theo dạng key–value.
  • Dùng dấu ngoặc nhọn { }.
  • Key là duy nhất, và đóng vai trò định danh cho value.
  • Khác với list:
    • List truy cập bằng chỉ số số học
    • Dictionary truy cập bằng tên key

Ví dụ:

user_info = {
    "name": "Hùng",
    "age": 25,
    "city": "Hà Nội"
}

print(user_info["name"])   # Truy cập theo key

2. Cập nhật ứng dụng: Nhận input theo dạng "days:unit"

Thay vì chỉ nhập số ngày, ta muốn người dùng nhập:

20:hours

hoặc

20:minutes

Các bước xử lý input

  • Yêu cầu người dùng nhập theo format days:unit
  • Tách chuỗi bằng dấu : → tạo list gồm 2 phần
  • Phần thứ 1 → số ngày
  • Phần thứ 2 → đơn vị chuyển đổi

Code thực tế:

user_input = input("Enter a number of days and conversion unit (ví dụ: 2:hours): ")
days_and_unit = user_input.split(":")   # Tách bởi dấu ':'
print(days_and_unit)

Ví dụ input:

2:hours

Kết quả:

["2", "hours"]

3. Tạo dictionary từ danh sách đã tách

Ý tưởng

  • Dùng index 0 → số ngày
  • Dùng index 1 → đơn vị
  • Tạo dictionary dạng:
{
    "days": <giá trị ngày>,
    "unit": <hours hoặc minutes>
}

Code thực tế:

days_and_unit = user_input.split(":")
my_dict = {
    "days": days_and_unit[0],
    "unit": days_and_unit[1]
}

print(my_dict)
print(type(my_dict))   # Kiểm tra kiểu dữ liệu

Output ví dụ:

{'days': '2', 'unit': 'hours'}
<class 'dict'>

4. Truy cập giá trị trong dictionary

Giải thích

  • Truy cập bằng dict["key"]
  • Không dùng số như list

Code ví dụ:

print(my_dict["days"])
print(my_dict["unit"])

5. Viết hàm chuyển đổi sử dụng dictionary

Ta cần tạo một hàm:

  • Nhận dictionary làm tham số
  • Lấy daysunit từ dictionary
  • Kiểm tra số ngày có phải số nguyên không
  • Kiểm tra đơn vị hợp lệ
  • Trả về kết quả chuyển đổi

Code hoàn chỉnh:

def validate_and_execute(data):
    try:
        days = int(data["days"])        # Chuyển về số nguyên
        unit = data["unit"]

        if unit == "hours":
            return f"{days} days = {days * 24} hours"
        elif unit == "minutes":
            return f"{days} days = {days * 24 * 60} minutes"
        else:
            return "Đơn vị không được hỗ trợ!"
    except ValueError:
        return "Giá trị ngày không hợp lệ! Vui lòng nhập số nguyên."

6. Ghép toàn bộ chương trình

def validate_and_execute(data):
    try:
        days = int(data["days"])
        unit = data["unit"]

        if unit == "hours":
            return f"{days} days = {days * 24} hours"
        elif unit == "minutes":
            return f"{days} days = {days * 24 * 60} minutes"
        else:
            return "Đơn vị không được hỗ trợ!"
    except ValueError:
        return "Giá trị ngày không hợp lệ! Vui lòng nhập số nguyên."


# --- Phần chính của chương trình ---
user_input = input("Enter a number of days and conversion unit (ví dụ: 20:hours): ")

# Tách giá trị
days_and_unit = user_input.split(":")

# Tạo dictionary
user_data = {
    "days": days_and_unit[0],
    "unit": days_and_unit[1]
}

# Thực thi
result = validate_and_execute(user_data)
print(result)

7. Tóm tắt kiến thức quan trọng (Tiếng Việt)

Dictionary là gì?

  • Kiểu dữ liệu dạng key–value
  • Truy cập bằng tên key, không phải chỉ số

Khi nào dùng dictionary?

  • Khi bạn cần gắn nhãn cho dữ liệu
  • Khi dữ liệu có cấu trúc
  • Khi cần truyền nhiều giá trị vào hàm một cách rõ ràng

Cú pháp chính

  • Tạo từ điển: { "key": value }
  • Truy cập: dict["key"]
  • Thêm key mới: dict["new_key"] = value

Ví dụ thực tế đã học

  • Chuyển đổi ngày → giờ / phút dựa trên dictionary
  • Parse input người dùng dạng "days:unit"
  • Validate dữ liệu bằng try/except

PHẦN BÀI TẬP

Bài 1 — Tạo dictionary từ input

Đề bài:

Viết chương trình yêu cầu người dùng nhập theo format:

10:hours

Sau đó, tách chuỗi và tạo dictionary:

{
  "days": <giá trị ngày>,
  "unit": <giá trị đơn vị>
}

In dictionary đó ra màn hình.

Đáp án:

user_input = "10:hours"
days_and_unit = user_input.split(":")

result = {
    "days": days_and_unit[0],
    "unit": days_and_unit[1]
}

print(result)

Giải thích:

  • split(":") tách chuỗi thành list: ["10", "hours"]
  • Dùng index để gán vào dictionary
  • Dictionary được in ra:
    {'days': '10', 'unit': 'hours'}

Bài 2 — Truy cập giá trị trong dictionary

Đề bài:

Cho dictionary:

info = {"days": "3", "unit": "minutes"}

In ra:

  • Giá trị của "days"
  • Giá trị của "unit"

Đáp án:

info = {"days": "3", "unit": "minutes"}

print(info["days"])
print(info["unit"])

Giải thích:

  • Truy cập dictionary dùng key: dict["key"]
  • Output:
    3
    minutes

Bài 3 — Xử lý lỗi ValueError

Đề bài:

Viết hàm nhận dictionary:

{"days": "abc", "unit": "hours"}

Hàm chuyển giá trị "days" sang kiểu int.

Nếu lỗi, trả về "Giá trị ngày không hợp lệ!".

Đáp án:

def check_days(data):
    try:
        value = int(data["days"])
        return value
    except ValueError:
        return "Giá trị ngày không hợp lệ!"

test_data = {"days": "abc", "unit": "hours"}
print(check_days(test_data))

Giải thích:

  • "abc" không thể convert sang int → gây lỗi ValueError
  • except bắt lỗi và trả về thông báo
  • Output:
    Giá trị ngày không hợp lệ!

Bài 4 — Viết hàm chuyển đổi hoàn chỉnh

Đề bài:

Viết hàm nhận dictionary như sau:

{"days": "4", "unit": "hours"}

Nếu unit là "hours" → trả về "4 days = 96 hours"

Nếu "minutes" → trả về "4 days = 5760 minutes"

Đáp án:

def convert(data):
    days = int(data["days"])
    unit = data["unit"]

    if unit == "hours":
        return f"{days} days = {days * 24} hours"
    elif unit == "minutes":
        return f"{days} days = {days * 24 * 60} minutes"
    else:
        return "Đơn vị không được hỗ trợ!"

print(convert({"days": "4", "unit": "hours"}))

Giải thích:

  • 4 * 24 = 96
  • Unit là "hours" → nhánh if đúng → trả kết quả
  • Output:
    4 days = 96 hours

Bài 5 — Tạo chương trình đầy đủ nhận input từ người dùng

Đề bài:

Viết chương trình:

  1. Nhập chuỗi "days:unit"
  1. Tách chuỗi
  1. Tạo dictionary
  1. Truyền dictionary vào hàm validate_and_execute
  1. In kết quả chuyển đổi

Đáp án:

def validate_and_execute(data):
    try:
        days = int(data["days"])
        unit = data["unit"]

        if unit == "hours":
            return f"{days} days = {days * 24} hours"
        elif unit == "minutes":
            return f"{days} days = {days * 24 * 60} minutes"
        else:
            return "Đơn vị không được hỗ trợ!"
    except ValueError:
        return "Giá trị ngày không hợp lệ!"


# Chương trình chính
user_input = input("Nhập dữ liệu theo dạng days:unit → ví dụ 5:hours: ")
days_and_unit = user_input.split(":")

data = {
    "days": days_and_unit[0],
    "unit": days_and_unit[1]
}

print(validate_and_execute(data))

Giải thích:

  • Chương trình xử lý toàn bộ pipeline
  • Validation đảm bảo nhập sai thì vẫn báo lỗi
  • Ví dụ input: 5:minutes → Output:
    5 days = 7200 minutes

Bài 6 — Bài nâng cao: Kiểm tra input không đúng định dạng

Đề bài:

Nếu người dùng nhập chuỗi không chứa dấu ":", ví dụ "10hours"

→ Hãy in "Sai định dạng! Vui lòng nhập theo dạng days:unit"

Đáp án:

user_input = "10hours"

if ":" not in user_input:
    print("Sai định dạng! Vui lòng nhập theo dạng days:unit")
else:
    days_and_unit = user_input.split(":")
    print(days_and_unit)

Giải thích:

  • Kiểm tra ký tự ":" giúp đảm bảo input hợp lệ
  • Nếu không có → báo lỗi định dạng trước khi chạy chương trình
  • Tránh IndexError khi split không đúng