Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python Nested Dictionary (Từ điển lồng nhau): Hướng dẫn cách dùng

Một nested dictionary (từ điển lồng nhau) trong Python là từ điển bên trong từ điển khác. Điều này cho phép bạn lưu trữ dữ liệu dùng cấu trúc ánh xạ khóa-giá trị bên trong từ điển hiện có.

Khi bạn làm việc với từ điển trong Python, bạn có thể gặp tình huống từ điển chứa từ điển khác.

Cấu trúc dữ liệu này thường được gọi là nested dictionary, và có nhiều trường hợp sử dụng tiềm năng trong mã Python.

Hướng dẫn này sẽ thảo luận cơ bản về nested dictionary Python. Chúng ta sẽ đi qua vài ví dụ để bạn học cách tạo và sửa đổi nested dictionary.

Ôn tập Python Dictionary

Từ điển là kiểu dữ liệu ánh xạ (mapping data type) của Python. Từ điển Python ràng buộc — hoặc map — khóa đến giá trị, và cung cấp cách hiệu quả lưu trữ dữ liệu.

Khi khóa được ánh xạ đến giá trị, bạn có thể truy xuất dữ liệu lưu trong giá trị đó bằng cách tham chiếu khóa. Vì vậy, khóa đóng vai trò như nhãn. Ví dụ từ điển lưu giá các hương kem bán tại cửa hàng kem địa phương, The Frozen Spoon:

ice_cream_flavors = {
    "Vanilla": 0.50,
    "Chocolate": 0.50,
    "Cookies and Cream": 0.75,
    "Strawberry": 0.65,
    "Buttered Pecan": 0.90
}

Các khóa trong từ điển này là tên kem (ví dụ: "Vanilla"), và giá trị là giá mỗi lần múc của từng loại kem.

Python Nested Dictionary

Nested dictionary Python là từ điển bên trong từ điển. Chúng dùng để biểu diễn dữ liệu từ điển bên trong từ điển khác. Bạn có thể lồng bao nhiêu từ điển trong từ điển tùy ý.

Nested dictionary hữu ích nếu bạn muốn lưu một loạt từ điển thành phần trong một từ điển lớn.

Hãy đi qua ví dụ minh họa cách nested dictionary hoạt động. Giả sử muốn tạo từ điển lưu từ điển về mỗi hương kem bán tại The Frozen Spoon. Mỗi từ điển trong từ điển lớn nên liệt kê:

  • Tên hương kem
  • Giá của nó
  • Số hộp (pints) còn trong kho

Đây là nested dictionary lưu trữ dữ liệu đó:

ice_cream_flavors = {
    0: {
        "flavor": "Vanilla",
        "price": 0.50,
        "pints": 20
    },
    1: {
        "flavor": "Chocolate",
        "price": 0.50,
        "pints": 31
    },
    2: {
        "flavor": "Cookies and Cream",
        "price": 0.75,
        "pints": 14
    }
}

Trong mã, chúng ta khai báo một từ điển lớn tên ice_cream_flavors. Từ điển này chứa ba từ điển, mỗi từ điển lưu thông tin về một hương kem cụ thể.

Nếu không dùng nested dictionary, chúng ta phải lưu mỗi từ điển này trong biến riêng biệt. Điều này phản trực giác vì mỗi từ điển lưu thông tin về hương kem.

Truy cập mục trong Nested Dictionary

Để truy cập mục trong nested dictionary, chúng ta có thể dùng cú pháp lập chỉ mục (indexing syntax).

Giả sử muốn lấy giá kem có giá trị chỉ mục 0 trong từ điển. Chúng ta có thể làm bằng mã này:

ice_cream_flavors = {
    0: { "flavor": "Vanilla", "price": 0.50, "pints": 20 },
    1: { "flavor": "Chocolate", "price": 0.50, "pints": 31 },
    2: { "flavor": "Cookies and Cream", "price": 0.75, "pints": 14 }
}
print(ice_cream_flavors[0]["price"])
print(ice_cream_flavors[0]["flavor"])

Mã trả về:

0.50
Vanilla

Trong mã này, trước tiên chỉ định khóa mục có giá trị trong từ điển lớn chúng ta muốn lấy. Trong trường hợp này, muốn truy cập bản ghi có giá trị chỉ mục 0.

Sau đó, chỉ định tên mục trong từ điển bên trong muốn lấy. Trong trường hợp này, muốn lấy giá kem và hương. Vì vậy, chỉ định price và flavor trong cả hai câu lệnh print().

Nested Dictionary Python: Thêm phần tử

Để thêm phần tử vào nested dictionary, chúng ta có thể dùng cùng cú pháp dùng để sửa đổi mục. Không có phương thức nào bạn nên dùng để thêm mục vào nested dictionary. Bạn cần dùng toán tử gán.

Cú pháp thêm mục như sau:

dictionary_name[new_key_name] = new_value

Giả sử chúng ta có từ điển lưu thông tin kem vanilla bán. Chúng ta muốn theo dõi xem có giảm giá trên kem không. Chúng ta có thể làm bằng mã sau:

ice_cream_flavors = {
    0: { "flavor": "Vanilla", "price": 0.50, "pints": 20 },
    1: { "flavor": "Chocolate", "price": 0.50, "pints": 31 },
    2: { "flavor": "Cookies and Cream", "price": 0.75, "pints": 14 }
}
ice_cream_flavors[0]["discount"] = True
print(ice_cream_flavors[0])

Hãy chạy mã xem sao:

{'flavor': 'Vanilla', 'price': 0.5, 'pints': 20, 'discount': True}

Từ điển được lưu trong biến Python "ice_cream_flavors".

Chúng ta thêm khóa tên discount vào từ điển. Vị trí chỉ mục của khóa này là 0. Chúng ta đặt giá trị khóa này là True. Sau đó, in từ điển có giá trị chỉ mục 0 trong nested dictionary ice_cream_flavors. Điều này cho thấy khóa discount đã được thêm.

Chúng ta có thể dùng cú pháp này để cập nhật phần tử trong từ điển hiện có. Giả sử muốn đổi giá kem sô-cô-la thành $0.45 mỗi lần múc. Chúng ta có thể làm bằng mã này:

ice_cream_flavors = {
    0: { "flavor": "Vanilla", "price": 0.50, "pints": 20 },
    1: { "flavor": "Chocolate", "price": 0.50, "pints": 31 },
    2: { "flavor": "Cookies and Cream", "price": 0.75, "pints": 14 }
}
ice_cream_flavors[1]["price"] = 0.45
print(ice_cream_flavors[1])

Mã trả về:

{'flavor': 'Chocolate', 'price': 0.45, 'pints': 31}

Chúng ta thay đổi giá trị khóa price cho kem sô-cô-la thành $0.45.

Để làm vậy, chỉ định giá trị chỉ mục của từ điển có giá trị price muốn thay đổi là 1. Giá trị này chứa thông tin về kem sô-cô-la trong từ điển. Sau đó, gán giá trị mới cho khóa price.

Nested Dictionary Python: Xóa phần tử

Để xóa mục lưu trong nested dictionary, chúng ta dùng câu lệnh del. Câu lệnh del cho phép xóa đối tượng. del viết như câu lệnh break Python, trên dòng riêng, theo sau mục trong từ điển muốn xóa.

Giả sử chúng ta không còn cung cấp kem cookies and cream tại cửa hàng tạm thời. Tủ lạnh lưu kem cookies and cream hỏng và hàng tan.

Chúng ta có thể xóa kem này khỏi nested dictionary bằng mã sau:

ice_cream_flavors = {
    0: { "flavor": "Vanilla", "price": 0.50, "pints": 20 },
    1: { "flavor": "Chocolate", "price": 0.50, "pints": 31 },
    2: { "flavor": "Cookies and Cream", "price": 0.75, "pints": 14 }
}
del ice_cream_flavors[2]
print(ice_cream_flavors)

Mã trả về:

{0: {'flavor': 'Vanilla', 'price': 0.5, 'pints': 20}, 1: {'flavor': 'Chocolate', 'price': 0.5, 'pints': 31}}

Trong mã, dùng câu lệnh del xóa giá trị trong nested dictionary có khóa bằng 2. Như bạn thấy, điều này xóa mục Cookies and Cream khỏi nested dictionary.

Duyệt qua Python Nested Dictionary

Bây giờ, giả sử muốn in nội dung mỗi từ điển trong nested dictionary ra bảng điều khiển. Làm thế nào hoàn thành nhiệm vụ này?

Đó là câu hỏi hay. Để in nội dung nested dictionary, chúng ta có thể lặp qua nó dùng vòng lặp for Python. Chúng ta cũng dùng phương thức items() từ điển Python lấy danh sách khóa và giá trị trong từ điển:

ice_cream_flavors = {
    0: { "flavor": "Vanilla", "price": 0.50, "pints": 20 },
    1: { "flavor": "Chocolate", "price": 0.50, "pints": 31 },
    2: { "flavor": "Cookies and Cream", "price": 0.75, "pints": 14 }
}
for key, value in ice_cream_flavors.items():
    print("Ice Cream:", key)
    for k, v in value.items():
        print(k + ":", value[k])

Mã trả về:

Ice Cream: 0
flavor: Vanilla
price: 0.5
pints: 20
Ice Cream: 1
flavor: Chocolate
price: 0.5
pints: 31
Ice Cream: 2
flavor: Cookies and Cream
price: 0.75
pints: 14

Hãy phân tích mã. Đầu tiên, định nghĩa nested dictionary hương kem.

Sau đó, định nghĩa vòng lặp for đi qua mỗi khóa và giá trị trong từ điển ice_cream_flavors. Vòng lặp dùng .items() tạo danh sách tất cả khóa và giá trị trong từ điển ice_cream_flavors, mà vòng lặp có thể lặp qua.

Sau đó, in Ice Cream: theo sau khóa liên kết với kem cụ thể.

Tiếp theo, dùng vòng lặp for khác lặp qua mỗi mục trong mỗi value trong nested dictionary. Điều này tham chiếu đến mỗi mục bên trong trong nested dictionary (như cho vanilla và sô-cô-la). Vòng lặp in tên mỗi khóa trong từ điển bên trong, theo sau dấu hai chấm, rồi giá trị liên kết với khóa đó.

Kết luận

Nested dictionary cho phép lưu từ điển bên trong từ điển trong Python.

Hướng dẫn này đã thảo luận, tham chiếu ví dụ, cách:

  • Tạo nested dictionary
  • Thêm phần tử vào và cập nhật phần tử trong nested dictionary
  • Xóa phần tử khỏi nested dictionary
  • Duyệt qua nested dictionary

Để tìm hiểu thêm về lập trình Python, đọc hướng dẫn How to Code in Python của chúng tôi.