Cách dùng Add Dictionary trong Python

Python Tutorial | by Hoc Python

Chúng ta đã biết Dictionary là một công cụ tuyệt vời để lưu trữ dữ liệu có cấu trúc dưới dạng các cặp khóa-giá trị. Tuy nhiên, trong quá trình phát triển ứng dụng, dữ liệu không phải lúc nào cũng có sẵn từ đầu. Chúng ta thường xuyên cần bổ sung thêm thông tin vào Dictionary khi chương trình chạy hoặc khi có dữ liệu mới phát sinh.

Việc thêm các cặp khóa-giá trị mới vào một Dictionary đã tồn tại là một kỹ năng thiết yếu để bạn có thể xây dựng các cấu trúc dữ liệu động và linh hoạt. Trong phần này, chúng ta sẽ tìm hiểu các phương pháp khác nhau mà Python cung cấp để thêm các phần tử vào Dictionary, từ những cách đơn giản nhất đến những kỹ thuật an toàn và hiệu quả hơn. Hãy cùng tìm hiểu cách làm chủ việc bổ sung dữ liệu vào Dictionary nhé!

Gán giá trị trực tiếp bằng dấu ngoặc vuông [] trong Python

Đây là cách cơ bản và phổ biến nhất để thêm một cặp khóa-giá trị mới vào một Dictionary trong Python. Phương pháp này rất trực quan và dễ sử dụng.

Khái niệm: Bạn sử dụng toán tử gán = với một khóa CHƯA tồn tại trong dictionary. Python sẽ tạo một cặp khóa-giá trị mới (bao gồm khóa và giá trị bạn cung cấp) và thêm nó vào dictionary.

Cú pháp cơ bản: ten_dictionary[khóa_mới] = giá_trị_mới

Cách hoạt động: Khi bạn thực hiện lệnh này, Python sẽ kiểm tra:

  • Nếu khóa_mới chưa có trong ten_dictionary, một cặp khóa-giá trị mới sẽ được tạo và thêm vào.

  • Lưu ý quan trọng: Nếu khóa_mới đã tồn tại trong ten_dictionary, thao tác này sẽ sửa đổi (ghi đè) giá trị cũ của khóa đó bằng giá_trị_mới mà bạn vừa gán, chứ không phải thêm một phần tử mới. Đây là một điểm cực kỳ quan trọng cần nhớ để tránh mất dữ liệu không mong muốn.

Ví dụ minh họa:

Hãy cùng xem xét các ví dụ cụ thể về việc thêm các kiểu dữ liệu khác nhau vào một Dictionary:

# Tạo một dictionary ban đầu (có thể rỗng hoặc có sẵn một vài phần tử)
thong_tin_nguoi_dung = {
    "ten": "Minh",
    "tuoi": 30
}
print("Dictionary ban đầu:", thong_tin_nguoi_dung)

print("\n--- Thêm giá trị chuỗi (string) ---")
# Thêm nghề nghiệp
thong_tin_nguoi_dung["nghe_nghiep"] = "Lập trình viên"
print("Sau khi thêm nghề nghiệp:", thong_tin_nguoi_dung)

print("\n--- Thêm giá trị số (number) ---")
# Thêm số điện thoại
thong_tin_nguoi_dung["so_dien_thoai"] = 123456789
print("Sau khi thêm số điện thoại:", thong_tin_nguoi_dung)

print("\n--- Thêm giá trị boolean ---")
# Thêm trạng thái hoạt động
thong_tin_nguoi_dung["dang_hoat_dong"] = True
print("Sau khi thêm trạng thái hoạt động:", thong_tin_nguoi_dung)

print("\n--- Thêm giá trị là một List ---")
# Thêm danh sách sở thích
thong_tin_nguoi_dung["so_thich"] = ["đọc sách", "chơi game", "du lịch"]
print("Sau khi thêm sở thích:", thong_tin_nguoi_dung)

print("\n--- Thêm giá trị là một Dictionary lồng (nested dictionary) ---")
# Thêm thông tin địa chỉ chi tiết
thong_tin_nguoi_dung["dia_chi"] = {
    "so_nha": "123",
    "duong": "ABC",
    "phuong": "DEF",
    "thanh_pho": "Hà Nội"
}
print("Sau khi thêm địa chỉ:", thong_tin_nguoi_dung)

print("\n--- Ví dụ về việc GHI ĐÈ giá trị (khi khóa đã tồn tại) ---")
# Khóa "tuoi" đã tồn tại, thao tác này sẽ ghi đè giá trị cũ (30) bằng giá trị mới (31)
thong_tin_nguoi_dung["tuoi"] = 31
print("Sau khi ghi đè tuổi:", thong_tin_nguoi_dung)

# Output:
# Dictionary ban đầu: {'ten': 'Minh', 'tuoi': 30}
#
# --- Thêm giá trị chuỗi (string) ---
# Sau khi thêm nghề nghiệp: {'ten': 'Minh', 'tuoi': 30, 'nghe_nghiep': 'Lập trình viên'}
#
# --- Thêm giá trị số (number) ---
# Sau khi thêm số điện thoại: {'ten': 'Minh', 'tuoi': 30, 'nghe_nghiep': 'Lập trình viên', 'so_dien_thoai': 123456789}
#
# --- Thêm giá trị boolean ---
# Sau khi thêm trạng thái hoạt động: {'ten': 'Minh', 'tuoi': 30, 'nghe_nghiep': 'Lập trình viên', 'so_dien_thoai': 123456789, 'dang_hoat_dong': True}
#
# --- Thêm giá trị là một List ---
# Sau khi thêm sở thích: {'ten': 'Minh', 'tuoi': 30, 'nghe_nghiep': 'Lập trình viên', 'so_dien_thoai': 123456789, 'dang_hoat_dong': True, 'so_thich': ['đọc sách', 'chơi game', 'du lịch']}
#
# --- Thêm giá trị là một Dictionary lồng (nested dictionary) ---
# Sau khi thêm địa chỉ: {'ten': 'Minh', 'tuoi': 30, 'nghe_nghiep': 'Lập trình viên', 'so_dien_thoai': 123456789, 'dang_hoat_dong': True, 'so_thich': ['đọc sách', 'chơi game', 'du lịch'], 'dia_chi': {'so_nha': '123', 'duong': 'ABC', 'phuong': 'DEF', 'thanh_pho': 'Hà Nội'}}
#
# --- Ví dụ về việc GHI ĐÈ giá trị (khi khóa đã tồn tại) ---
# Sau khi ghi đè tuổi: {'ten': 'Minh', 'tuoi': 31, 'nghe_nghiep': 'Lập trình viên', 'so_dien_thoai': 123456789, 'dang_hoat_dong': True, 'so_thich': ['đọc sách', 'chơi game', 'du lịch'], 'dia_chi': {'so_nha': '123', 'duong': 'ABC', 'phuong': 'DEF', 'thanh_pho': 'Hà Nội'}}

Như bạn thấy, việc sử dụng dấu ngoặc vuông [] và toán tử gán = là một cách rất linh hoạt để thêm các cặp khóa-giá trị mới vào Dictionary. Tuy nhiên, hãy luôn nhớ rằng nó cũng có thể ghi đè giá trị nếu khóa đã tồn tại.

III. Phương thức update(): Thêm nhiều cặp khóa-giá trị cùng lúc trong Python

Ngoài việc gán trực tiếp từng phần tử bằng dấu ngoặc vuông [], Python cung cấp phương thức update() để bạn có thể thêm hoặc cập nhật nhiều cặp khóa-giá trị cùng một lúc. Phương thức này cực kỳ hữu ích khi bạn muốn hợp nhất dữ liệu từ một nguồn khác vào dictionary hiện có.

Khái niệm: Phương thức update() cho phép bạn thêm hoặc cập nhật nhiều cặp khóa-giá trị cùng một lúc. Nguồn dữ liệu để cập nhật có thể là một Dictionary khác, hoặc một iterable (ví dụ: list of tuples) chứa các cặp khóa-giá trị.

Cú pháp cơ bản:

  • ten_dictionary.update(dictionary_khác)

  • ten_dictionary.update([('khóa1', giá_trị1), ('khóa2', giá_trị2), ...])

  • ten_dictionary.update(khóa_argument_1=giá_trị_1, khóa_argument_2=giá_trị_2, ...) (Khi các khóa là chuỗi hợp lệ cho tên biến)

Cách hoạt động:

Phương thức update() sẽ duyệt qua các cặp khóa-giá trị từ nguồn đầu vào mà bạn cung cấp.

Đối với mỗi cặp khóa-giá trị:

  • Nếu khóa đã tồn tại trong ten_dictionary, giá trị của nó sẽ được cập nhật bằng giá trị mới từ nguồn.

  • Nếu khóa chưa tồn tại, cặp khóa-giá trị mới sẽ được thêm vào ten_dictionary.

Ưu điểm: Tiện lợi và hiệu quả khi bạn cần thêm hàng loạt phần tử mới hoặc khi bạn muốn hợp nhất dữ liệu từ nhiều nguồn khác nhau vào một dictionary duy nhất.

Ví dụ minh họa:

Hãy cùng xem các ví dụ về cách sử dụng update():

# Tạo một dictionary ban đầu về thông tin sản phẩm
san_pham = {
    "ma_sp": "SP001",
    "ten_sp": "Laptop XYZ",
    "gia": 15000000,
    "ton_kho": 10
}
print("Sản phẩm ban đầu:", san_pham)

print("\n--- Ví dụ 1: Cập nhật từ một dictionary khác ---")
# Giả sử bạn nhận được thông tin cập nhật từ một hệ thống khác
thong_tin_cap_nhat_tu_he_thong = {
    "gia": 14500000,          # Giá mới (sửa đổi giá trị hiện có)
    "ngay_nhap_kho": "2024-07-29", # Khóa mới (thêm vào)
    "ton_kho": 8             # Tồn kho mới (sửa đổi giá trị hiện có)
}
san_pham.update(thong_tin_cap_nhat_tu_he_thong)
print("Sau khi cập nhật từ dictionary khác:", san_pham)

print("\n--- Ví dụ 2: Cập nhật từ một list các tuple ---")
# Bạn có thể có một danh sách các cặp khóa-giá trị cần thêm hoặc sửa
thong_tin_bo_sung_tu_list = [
    ("nha_cung_cap", "ABC Tech"), # Khóa mới (thêm vào)
    ("trang_thai", "Còn hàng"),   # Khóa mới (thêm vào)
    ("gia", 14000000)             # Giá mới (sẽ ghi đè giá 14500000)
]
san_pham.update(thong_tin_bo_sung_tu_list)
print("Sau khi cập nhật từ list các tuple:", san_pham)

print("\n--- Ví dụ 3: Cập nhật bằng cách truyền các từ khóa (keyword arguments) ---")
# Cách này thường dùng khi bạn muốn thêm hoặc sửa một vài phần tử mà khóa là chuỗi hợp lệ
san_pham.update(mo_ta="Laptop cao cấp, bền bỉ", bao_hanh="12 tháng")
print("Sau khi cập nhật bằng keyword arguments:", san_pham)

# Output:
# Sản phẩm ban đầu: {'ma_sp': 'SP001', 'ten_sp': 'Laptop XYZ', 'gia': 15000000, 'ton_kho': 10}
#
# --- Ví dụ 1: Cập nhật từ một dictionary khác ---
# Sau khi cập nhật từ dictionary khác: {'ma_sp': 'SP001', 'ten_sp': 'Laptop XYZ', 'gia': 14500000, 'ton_kho': 8, 'ngay_nhap_kho': '2024-07-29'}
#
# --- Ví dụ 2: Cập nhật từ một list các tuple ---
# Sau khi cập nhật từ list các tuple: {'ma_sp': 'SP001', 'ten_sp': 'Laptop XYZ', 'gia': 14000000, 'ton_kho': 8, 'ngay_nhap_kho': '2024-07-29', 'nha_cung_cap': 'ABC Tech', 'trang_thai': 'Còn hàng'}
#
# --- Ví dụ 3: Cập nhật bằng cách truyền các từ khóa (keyword arguments) ---
# Sau khi cập nhật bằng keyword arguments: {'ma_sp': 'SP001', 'ten_sp': 'Laptop XYZ', 'gia': 14000000, 'ton_kho': 8, 'ngay_nhap_kho': '2024-07-29', 'nha_cung_cap': 'ABC Tech', 'trang_thai': 'Còn hàng', 'mo_ta': 'Laptop cao cấp, bền bỉ', 'bao_hanh': '12 tháng'}

Phương thức update() là một công cụ rất linh hoạt và mạnh mẽ để quản lý dữ liệu trong Dictionary, đặc biệt khi bạn cần xử lý việc thêm và sửa đổi hàng loạt.

Phương thức setdefault(): Thêm nếu khóa chưa tồn tại trong Python

Phương thức setdefault() cung cấp một cách thông minh và an toàn để thêm một cặp khóa-giá trị vào dictionary chỉ khi khóa đó chưa tồn tại. Nếu khóa đã có sẵn, phương thức này sẽ trả về giá trị hiện tại của khóa mà không thay đổi gì trong dictionary.

Khái niệm: setdefault() là một phương thức của dictionary cho phép bạn thiết lập một giá trị mặc định cho một khóa nếu khóa đó chưa có. Nếu khóa đã tồn tại, nó sẽ trả về giá trị hiện tại của khóa đó.

Cú pháp cơ bản: gia_tri = ten_dictionary.setdefault(khóa, giá_trị_mặc_định)

Cách hoạt động:

Trường hợp 1: Khóa CHƯA có trong dictionary:

  • Phương thức sẽ thêm khóa vào dictionary với giá_trị_mặc_định bạn cung cấp.

  • Phương thức sẽ trả về giá_trị_mặc_định đó.

Trường hợp 2: Khóa ĐÃ có trong dictionary:

  • Phương thức sẽ không làm gì cả (không thay đổi giá trị hiện có của khóa).

  • Phương thức sẽ trả về giá trị hiện tại của khóa đó.

Ưu điểm: Rất hữu ích khi bạn muốn đảm bảo rằng một khóa có giá trị mặc định nếu nó chưa được thiết lập, mà không lo lắng về việc ghi đè giá trị nếu khóa đã tồn tại. Điều này giúp mã của bạn gọn gàng và tránh các câu lệnh if...else để kiểm tra sự tồn tại của khóa.

Ví dụ minh họa:

Hãy cùng xem các ví dụ để hiểu rõ cách setdefault() hoạt động trong cả hai trường hợp:

# Tạo một dictionary ban đầu về cài đặt người dùng
cai_dat_nguoi_dung = {
    "ngon_ngu": "Tiếng Việt",
    "che_do_toi": True
}
print("Cài đặt ban đầu:", cai_dat_nguoi_dung)

print("\n--- Trường hợp 1: Khóa CHƯA tồn tại ---")
# Thêm khóa "thong_bao_email" với giá trị mặc định là True
gia_tri_thong_bao = cai_dat_nguoi_dung.setdefault("thong_bao_email", True)
print(f"Giá trị trả về cho 'thong_bao_email': {gia_tri_thong_bao}")
print("Cài đặt sau khi thêm 'thong_bao_email':", cai_dat_nguoi_dung)

# Thêm khóa "phien_ban" với giá trị mặc định là "1.0"
gia_tri_phien_ban = cai_dat_nguoi_dung.setdefault("phien_ban", "1.0")
print(f"Giá trị trả về cho 'phien_ban': {gia_tri_phien_ban}")
print("Cài đặt sau khi thêm 'phien_ban':", cai_dat_nguoi_dung)


print("\n--- Trường hợp 2: Khóa ĐÃ tồn tại ---")
# Khóa "ngon_ngu" đã tồn tại với giá trị "Tiếng Việt"
# setdefault sẽ trả về giá trị hiện có và không thay đổi dictionary
gia_tri_ngon_ngu = cai_dat_nguoi_dung.setdefault("ngon_ngu", "English")
print(f"Giá trị trả về cho 'ngon_ngu': {gia_tri_ngon_ngu}")
print("Cài đặt sau khi gọi setdefault cho 'ngon_ngu':", cai_dat_nguoi_dung) # Không thay đổi

# Khóa "che_do_toi" đã tồn tại với giá trị True
# setdefault sẽ trả về giá trị hiện có và không thay đổi dictionary
gia_tri_che_do_toi = cai_dat_nguoi_dung.setdefault("che_do_toi", False)
print(f"Giá trị trả về cho 'che_do_toi': {gia_tri_che_do_toi}")
print("Cài đặt sau khi gọi setdefault cho 'che_do_toi':", cai_dat_nguoi_dung) # Không thay đổi

# Output:
# Cài đặt ban đầu: {'ngon_ngu': 'Tiếng Việt', 'che_do_toi': True}
#
# --- Trường hợp 1: Khóa CHƯA tồn tại ---
# Giá trị trả về cho 'thong_bao_email': True
# Cài đặt sau khi thêm 'thong_bao_email': {'ngon_ngu': 'Tiếng Việt', 'che_do_toi': True, 'thong_bao_email': True}
# Giá trị trả về cho 'phien_ban': 1.0
# Cài đặt sau khi thêm 'phien_ban': {'ngon_ngu': 'Tiếng Việt', 'che_do_toi': True, 'thong_bao_email': True, 'phien_ban': '1.0'}
#
# --- Trường hợp 2: Khóa ĐÃ tồn tại ---
# Giá trị trả về cho 'ngon_ngu': Tiếng Việt
# Cài đặt sau khi gọi setdefault cho 'ngon_ngu': {'ngon_ngu': 'Tiếng Việt', 'che_do_toi': True, 'thong_bao_email': True, 'phien_ban': '1.0'}
# Giá trị trả về cho 'che_do_toi': True
# Cài đặt sau khi gọi setdefault cho 'che_do_toi': {'ngon_ngu': 'Tiếng Việt', 'che_do_toi': True, 'thong_bao_email': True, 'phien_ban': '1.0'}

Như bạn thấy, setdefault() là một công cụ rất tiện lợi để đảm bảo rằng một khóa có giá trị mặc định nếu nó chưa được thiết lập, mà không làm mất đi giá trị hiện có nếu khóa đã tồn tại.

Kết bài

Mình đã cùng nhau tìm hiểu các phương pháp khác nhau để thêm các cặp khóa-giá trị mới vào Dictionary trong Python. Từ cách gán trực tiếp bằng dấu ngoặc vuông [] (phương pháp nhanh chóng và phổ biến), đến việc sử dụng phương thức update() để thêm hàng loạt phần tử hoặc hợp nhất dữ liệu, và cuối cùng là phương thức setdefault() thông minh giúp thêm một giá trị mặc định chỉ khi khóa chưa tồn tại.

Việc nắm vững các kỹ thuật này là rất quan trọng, vì nó cho phép bạn xây dựng các cấu trúc dữ liệu động, linh hoạt, có thể mở rộng khi có thông tin mới phát sinh. Dictionary là một công cụ mạnh mẽ để tổ chức dữ liệu, và khả năng thêm phần tử một cách hiệu quả sẽ giúp bạn quản lý thông tin trong các ứng dụng Python một cách chuyên nghiệp hơn.

Hãy tiếp tục thực hành và áp dụng những kiến thức này vào các dự án của bạn. Bạn sẽ thấy việc thêm dữ liệu vào Dictionary trở nên dễ dàng và hiệu quả như thế nào.

Bài viết liên quan