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

Python Collections: Hướng Dẫn Bước Đi Bước

Python có 4 kiểu tập hợp dữ liệu: list, tuple, set, dictionary. Module collections cung cấp thêm: namedtuple, Counter, defaultdict, ChainMap.


Python cung cấp 4 kiểu dữ liệu tập hợp: list, tuple, set, dictionary. Mỗi kiểu hữu ích trong tình huống riêng.

Ví dụ: list có thể sửa đổi → lưu danh sách tên học sinh thay đổi. Tuple bất biến → lưu danh sách vị kem không bao giờ thay đổi.

Thường khi làm việc Python, bạn thấy các kiểu này chưa đủ tính năng. May mắn là có module collections cung cấp tính năng nâng cao cho cấu trúc dữ liệu tập hợp.

Module collections được tạo để cải thiện tính năng của container tích hợp sẵn và cho lập trình viên linh hoạt hơn khi làm việc với cấu trúc dữ liệu. Hướng dẫn này phân tích cơ bản module collections và 4 cấu trúc dữ liệu phổ biến nhất từ module này.

Ôn Lại Collections (Tập Hợp)

Collections là kiểu dữ liệu container lưu trữ dữ liệu. Như thảo luận: list, set, tuple, dictionary. Mỗi kiểu có đặc điểm riêng.

List

List: có thứ tự (ordered), có thể thay đổi (mutable). Dùng cho dữ liệu thay đổi theo thời gian. Có thể thêm, xóa, cập nhật mục. Chứa trùng lặp được. Dùng chỉ số (index) truy cập mục.

sandwiches = ["Cheese", "Ham", "Tuna", "Egg Mayo"]

Tuple

Tuple: có thứ tự, bất biến (immutable). Có thể chứa trùng lặp nhưng không sửa giá trị. Bao quanh bởi ngoặc tròn () (sửa: gốc bài viết sai nói curly brackets).

sandwiches = ("Cheese", "Ham", "Tuna", "Egg Mayo")

Set

Set: không có thứ tự (unordered). Khai báo bằng ngoặc nhọn {} (sửa: gốc bài viết sai nói square brackets). Không có index, không cho phép trùng lặp.

sandwiches = {"Cheese", "Ham", "Tuna", "Egg Mayo"}

Dictionary

Dictionary: không thứ tự, có thể thay đổi, có chỉ mục (key). Mỗi mục có key và value.

sandwich = { "name": "Cheese", "price": 8.95 }

4 kiểu này dùng rộng rãi. Nhưng nếu cần thao tác nâng cao, module collections đáng cân nhắc.

Module Collections

Module collections chứa các cấu trúc dữ liệu chuyên biệt dùng bổ sung hoặc thay thế cho container tích hợp. Vì là module, phải import. Nhưng nó built-in, không cần cài thư viện ngoài.

Bài viết tập trung 4 cấu trúc phổ biến nhất:

  • Counter
  • namedtuple
  • defaultdict
  • ChainMap

Counter

Counter() là subclass của dictionary, dùng để đếm đối tượng hashable. Hàm Counter() nhận iterable làm tham số, trả về dictionary.

Ví dụ: danh sách đơn bánh mì tháng 1, muốn biết bán bao nhiêu BLT. Dùng Counter():

from collections import Counter
sandwich_sales = ["BLT", "Egg Mayo", "Ham", "Ham", "Ham", "Cheese", "BLT", "Cheese"]
our_counter = Counter(sandwich_sales)
print(our_counter["BLT"])

Kết quả: 2.

Giải thích: Import Counter. Khai báo mảng sandwich_sales. Gán our_counter = Counter(sandwich_sales). In our_counter["BLT"] → 2.

namedtuple

namedtuple() trả về tuple có tên cho từng vị trí. Tuple thường chỉ truy cập bằng index → dễ nhầm lẫn nếu tuple lớn.

Ví dụ lưu tên và giá bánh mì:

from collections import namedtuple
Sandwich = namedtuple("Sandwich", "name, price")
first_sandwich = Sandwich("Chicken Teriyaki", "$3.00")
print(first_sandwich.price)

Kết quả: $3.00.

Giải thích: Import namedtuple. Tạo tuple tên Sandwich với 2 trường: name, price. Dùng tên trường để truy cập giá trị. Khai báo first_sandwich với giá trị. In first_sandwich.price.

Cũng có thể tạo namedtuple từ list:

second_sandwich = Sandwich._make(["Spicy Italian", "$3.75"])
print(second_sandwich.name)

Kết quả: Spicy Italian. Dùng _make chuyển list thành namedtuple.

defaultdict

defaultdict() tạo dictionary không ném KeyError khi truy cập key không tồn tại. Thay vào đó, trả về kiểu dữ liệu mặc định đã định nghĩa trước.

Ví dụ dictionary trả về str (chuỗi rỗng) nếu key không tồn tại:

from collections import defaultdict
sandwiches = defaultdict(str)
sandwiches[0] = "Ham and Cheese"
sandwiches[1] = "BLT"
print(sandwiches[1])
print(sandwiches[2])

Kết quả: BLT và một dòng trống (vì key 2 không tồn tại → trả về str() rỗng).

Dictionary thường sẽ ném KeyError. defaultdict trả về kiểu mặc định (ở đây str, có thể là int, list...). Hữu ích khi thao tác trên nhiều mục nhưng phép toán có thể thất bại trên một vài mục → chương trình không bị lỗi, tiếp tục chạy.

ChainMap

ChainMap() gộp 2 hoặc nhiều dictionary; trả về danh sách các dictionary. Ví dụ: menu tiêu chuẩn và menu bí mật → gộp thành menu lớn. Dùng ChainMap().

from collections import ChainMap
standard_menu = { "BLT": "$3.05", "Roast Beef": "$3.55", "Cheese": "$2.85", "Shrimp": "$3.55", "Ham": "$2.85" }
secret_menu = { "Steak": "$3.60", "Tuna Special": "$3.20", "Turkey Club": "$3.20" }
menu = ChainMap(standard_menu, secret_menu)
print(menu)

Kết quả: ChainMap object gộp 2 menu.

Truy cập giá trị qua key: print(menu["BLT"]) → $3.05.

Lưu ý: ChainMap cập nhật tự động khi dictionary gốc thay đổi. Thay đổi standard_menu["BLT"] → ChainMap cũng cập nhật.

ChainMap có phương thức keys() và values() lấy tất cả key/value:

print(list(menu.keys()))
print(list(menu.values()))

Thêm dictionary mới vào ChainMap bằng new_child():

test_menu = { "Veggie Deluxe": "$3.00", "House Club Special": "$3.65" }
new_menu = menu.new_child(test_menu)
print(new_menu)

Kết quả: ChainMap cập nhật với menu mới ở đầu.

Kết Luận

Module collections Python mở rộng container tích hợp sẵn và cung cấp phương thức cấu trúc dữ liệu tùy chỉnh. Hữu ích khi cần thao tác trên list/tuple... nhưng cần chức năng không có trong Python "vanilla" (thuần).

Hướng dẫn này, kèm ví dụ, phân tích cách dùng collections Python và 4 phương thức chính: Counter, namedtuple, defaultdict, ChainMap.

Bây giờ bạn đã trang bị kiến thức để làm việc với module collections Python như chuyên gia!

Tò mò việc học Python giúp bước vào nghề công nghệ như thế nào? Tải ứng dụng Career Karma miễn phí hôm nay và nói chuyện với chuyên gia tư vấn nghề nghiệp!