Computer >> Máy Tính >  >> Lập trình >> Python

Bộ sưu tập Python:Hướng dẫn từng bước

Python có bốn kiểu thu thập dữ liệu:danh sách, bộ giá trị, bộ và từ điển. Mô-đun Python của bộ sưu tập cung cấp các tùy chọn bổ sung, bao gồm namedtuple , Counter , defaultdict ChainMap .


Python cung cấp bốn kiểu dữ liệu thu thập:danh sách, bộ giá trị, bộ và từ điển. Mỗi kiểu dữ liệu này đều hữu ích trong các tình huống cụ thể.

Ví dụ:vì danh sách có thể được sửa đổi, bạn có thể muốn sử dụng một danh sách để lưu trữ danh sách tên học sinh đang phát triển. Hoặc giả bạn muốn lưu trữ một danh sách các hương vị kem sẽ không bao giờ thay đổi. Một bộ tuple, không thể sửa đổi nội dung, có thể thích hợp hơn.

Thông thường, khi làm việc bằng Python, bạn có thể thấy rằng các loại dữ liệu này không cung cấp tất cả các tính năng mà bạn đang tìm kiếm. May mắn thay, có một mô-đun Python mà bạn có thể sử dụng để truy cập các tính năng nâng cao hơn liên quan đến bộ sưu tập dữ liệu:mô-đun bộ sưu tập Python.

Mô-đun bộ sưu tập Python được tạo ra để cải thiện chức năng của các tùy chọn bộ sưu tập tích hợp sẵn và cung cấp cho các nhà phát triển sự linh hoạt hơn khi làm việc với cấu trúc dữ liệu. Trong hướng dẫn này, chúng tôi sẽ chia nhỏ những kiến ​​thức cơ bản về mô-đun tập hợp Python và khám phá bốn cấu trúc dữ liệu được sử dụng phổ biến nhất từ ​​mô-đun.

Trình làm mới Bộ sưu tập

Bộ sưu tập là loại dữ liệu vùng chứa có thể được sử dụng để lưu trữ dữ liệu. Như đã thảo luận trước đó, bộ sưu tập có thể lưu trữ danh sách, bộ, bộ giá trị và từ điển. Mỗi kiểu dữ liệu này có đặc điểm riêng.

Danh sách

Danh sách là một kiểu dữ liệu có thứ tự, có thể thay đổi, có thể được sử dụng để lưu trữ dữ liệu có thể thay đổi theo thời gian. Ví dụ:bạn có thể thêm, xóa và cập nhật các mục danh sách hiện có. Danh sách có thể chứa các giá trị trùng lặp. Bạn có thể sử dụng số chỉ mục để tham chiếu các mục riêng lẻ trong danh sách.

Sau đây là một ví dụ về khai báo danh sách bằng Python:

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

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

Tuples

Tuples là kiểu dữ liệu có thứ tự và bất biến. Mặc dù bộ giá trị có thể chứa các giá trị trùng lặp nhưng không thể thay đổi giá trị của chúng. Các bộ giá trị được bao quanh bởi dấu ngoặc nhọn.

Dưới đây là một ví dụ về tuple Python:

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

Bộ

Bộ là danh sách không có thứ tự. Chúng được khai báo bằng cách sử dụng dấu ngoặc vuông. Không giống như danh sách, tập hợp không có giá trị chỉ mục và không thể bao gồm các mục nhập trùng lặp.

Dưới đây là một ví dụ về bộ Python:

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

Từ điển

Từ điển là kiểu dữ liệu không có thứ tự, có thể thay đổi và có thể được lập chỉ mục. Mỗi mục trong từ điển có một khóa và một giá trị.

Dưới đây là một ví dụ về mục nhập từ điển Python:

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

Bốn kiểu dữ liệu này có nhiều cách sử dụng trong Python. Tuy nhiên, nếu bạn đang muốn thực hiện các hành động nâng cao hơn với các kiểu dữ liệu vùng chứa Python, thì mô-đun bộ sưu tập Python đáng được xem xét.

Mô-đun Bộ sưu tập

Mô-đun bộ sưu tập Python chứa một số cấu trúc dữ liệu chuyên biệt mà bạn có thể sử dụng thêm vào — hoặc thay thế cho — các vùng chứa tích hợp của Python. Bởi vì collections là một mô-đun, chúng ta phải nhập nó vào chương trình của mình. Tuy nhiên, nó được xây dựng trong Python, vì vậy chúng tôi không cần nhập các thư viện phụ.

Trong bài viết này, chúng tôi sẽ tập trung vào bốn cấu trúc dữ liệu được sử dụng phổ biến nhất từ ​​mô-đun tập hợp. Những điều này như sau:

  • Bộ đếm
  • đã đặt tên cho
  • defaultdict
  • ChainMap

Bộ đếm

Counter() là một lớp con của đối tượng từ điển và có thể được sử dụng để đếm các đối tượng có thể băm. Bộ đếm Counter() hàm nhận vào một đối số có thể lặp lại và trả về một từ điển.

Vì vậy, giả sử chúng tôi có danh sách các đơn đặt hàng bánh sandwich cho tháng 1 và muốn biết chúng tôi đã bán bao nhiêu bánh sandwich BLT trong tháng đó. Chúng tôi có thể sử dụng Counter() chức năng để làm điều này.

Dưới đây là một ví dụ về mã chúng tôi sẽ sử dụng:

from collections import Counter

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

Chương trình của chúng tôi trả về:2 .

Có rất nhiều thứ đang diễn ra trong mã của chúng ta, vì vậy hãy phân tích nó.

Trên dòng đầu tiên, chúng tôi nhập Counter chức năng từ collections . Chúng tôi phải làm điều này vì collections là một mô-đun. Sau đó, chúng tôi khai báo sandwich_sales của chúng tôi mảng, cửa hàng chúng tôi đã bán bao nhiêu bánh mì trong tháng Giêng.

Trên dòng tiếp theo, chúng tôi khai báo our_counter và gán cho nó Counter(sandwich_sales) chức năng. Điều này cho phép chúng tôi truy cập kết quả của Counter() chức năng khi chúng tôi tham chiếu our_counter .

Cuối cùng, chúng tôi sử dụng print(our_counter[“BLT”]) để in ra bao nhiêu chiếc bánh mì trong từ điển của chúng tôi bằng BLT . Trong trường hợp này, câu trả lời là 2 .

têntuple

namedtuple() phương thức trả về một bộ giá trị với các tên cho mỗi vị trí trong bộ giá trị. Khi bạn đang làm việc với một bộ tuple chuẩn, cách duy nhất để bạn có thể truy cập các giá trị riêng lẻ là tham khảo số chỉ mục của bộ tuple. Nếu bạn đang làm việc với một bộ giá trị lớn, điều này có thể nhanh chóng trở nên khó hiểu.

Dưới đây là một ví dụ về việc sử dụng namedtuple() phương pháp để lưu tên và giá của một chiếc bánh sandwich:

from collections import namedtuple

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

Chương trình của chúng tôi trả về:$3.00 .

Có rất nhiều thứ đang diễn ra trong mã của chúng ta, vì vậy hãy phân tích nó. Trên dòng đầu tiên, chúng tôi nhập namedtuple từ collections để chúng tôi có thể sử dụng nó trong mã của mình.

Trên dòng tiếp theo, chúng ta tạo bộ Sandwich với tên Sandwich và gán cho nó hai tiêu đề:tên và giá. Điều này cho phép chúng tôi sử dụng các tiêu đề này để tham chiếu các giá trị trong các bộ giá trị của chúng tôi sau này trong mã của chúng tôi. Tiếp theo, chúng tôi khai báo một biến có tên là first_sandwich , chúng tôi đã chỉ định món tuple Chicken Teriyaki .

Cuối cùng, chúng tôi in ra giá first_sandwich của chúng tôi , trong trường hợp này là $ 3,00.

Bạn cũng có thể tạo một namedtuple() bằng cách sử dụng một danh sách. Đây là một ví dụ:

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

Chương trình của chúng tôi trả về:Spicy Italian . Trong ví dụ này, chúng tôi sử dụng _make ngoài Sandwich của chúng tôi mục để biểu thị rằng chúng tôi muốn biến danh sách của mình thành một namedtuple() .

defaultdict

defaultdict() phương thức có thể được sử dụng để tạo từ điển Python không ném KeyError khi bạn cố gắng truy cập một đối tượng không tồn tại. Thay vào đó, nếu bạn tham chiếu đến một đối tượng không tồn tại, từ điển sẽ trả về kiểu dữ liệu được xác định trước.

Đây là một ví dụ sử dụng defaultdict() để khai báo một từ điển sẽ trả về một str nếu chúng tôi tham chiếu đến một đối tượng 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])

Chương trình của chúng tôi trả về:

BLT
// This is a blank line

Trong ví dụ trên, chúng tôi đã tạo một từ điển với các giá trị tại các vị trí chỉ mục 1 . Khi chúng tôi in ra sandwiches[1] , chúng tôi có thể thấy rằng từ điển của chúng tôi đã lưu trữ các giá trị của chúng tôi. Tuy nhiên, khi chúng tôi cố gắng in ra mục được liên kết với giá trị chỉ mục 2 , chương trình của chúng tôi trả về một dòng trống vì không có giá trị nào được gán cho chỉ mục đó.

Trong một từ điển tiêu chuẩn, chương trình của chúng tôi sẽ trả về một KeyError. Tuy nhiên, vì chúng tôi đã sử dụng defaultdict , chương trình của chúng tôi thay vào đó trả về kiểu dữ liệu mà chúng tôi đã chỉ định khi tạo từ điển. Trong ví dụ trên, chúng tôi đã tuyên bố rằng bất kỳ khóa không hợp lệ nào sẽ trả về str , nhưng chúng tôi có thể đã mã hóa nó để trả về một số nguyên hoặc bất kỳ kiểu dữ liệu hợp lệ nào khác.

Chức năng này có thể hữu ích khi bạn đang làm việc với từ điển để thực hiện thao tác trên nhiều mục nhưng thao tác này có thể không hoạt động trên từng mục. Thay vì khiến chương trình của bạn trả về lỗi, defaultdict() sẽ trả về giá trị mặc định và tiếp tục chạy.

Bản đồ chuỗi

ChainMap() phương pháp được sử dụng để kết hợp hai hoặc nhiều từ điển; nó trả về một danh sách các từ điển. Ví dụ:giả sử chúng tôi có hai menu — một menu tiêu chuẩn và một menu bí mật — mà chúng tôi muốn hợp nhất thành một menu lớn. Để làm điều này, chúng tôi có thể sử dụng ChainMap() chức năng.

Đây là một ví dụ về việc sử dụng ChainMap() để hợp nhất các menu tiêu chuẩn và bí mật của chúng tôi:

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)

Mã của chúng tôi trả về một đối tượng ChainMap đã hợp nhất hai menu của chúng tôi với nhau, như sau:

ChainMap({'BLT': '$3.05', 'Roast Beef': '$3.55', 'Cheese': '$2.85', 'Shrimp': '$3.55', 'Ham': '$2.85'}, {'Steak': '$3.60', 'Tuna Special': '$3.20', 'Turkey Club': '$3.20'})

Chúng tôi có thể truy cập từng giá trị trong Bản đồ chuỗi của mình bằng cách tham chiếu tên khóa của nó. Ví dụ:đây là một dòng mã cho phép chúng tôi truy xuất giá của bánh sandwich BLT:

print(menu["BLT"])

Chương trình của chúng tôi trả lại:$ 3,05

Ngoài ra, điều quan trọng cần lưu ý là ChainMap cập nhật khi các từ điển mà nó chứa được cập nhật. Vì vậy, nếu bạn thay đổi giá trị trong standard_menu hoặc secret_menu từ điển, đối tượng ChainMap cũng sẽ được cập nhật. Đây là một ví dụ:

print(menu)
standard_menu["BLT"] = "$3.10"
print(menu)

Mã của chúng tôi trả về:

ChainMap({'BLT': '$3.10', 'Roast Beef': '$3.55', 'Cheese': '$2.85', 'Shrimp': '$3.55', 'Ham': '$2.85'}, {'Steak': '$3.60', 'Tuna Special': '$3.20', 'Turkey Club': '$3.20'})

Như bạn có thể thấy, giá BLT của chúng tôi đã thay đổi từ $ 3,05 thành $ 3,10 vì chúng tôi đã thay đổi giá của nó trong standard_menu của chúng tôi từ điển.

Đối tượng ChainMap cũng bao gồm hai chức năng có thể được sử dụng để lấy các khóa hoặc giá trị từ một đối tượng. Chúng ta có thể minh họa điều này bằng cách sử dụng các phím keys() và các giá trị Counter() các phương pháp. Các phương thức này trả về các khóa dữ liệu của chúng tôi (chúng tôi có thể sử dụng để tham chiếu đến một giá trị cụ thể) và các giá trị mà chúng đã được chỉ định:

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

Mã của chúng tôi trả về như sau:

['Steak', 'Tuna Special', 'Turkey Club', 'BLT', 'Roast Beef', 'Cheese', 'Prawn', 'Ham']
['$3.60', '$3.20', '$3.20', '$3.05', '$3.55', '$2.85', '$3.55', '$2.85']

Mã của chúng tôi đã trả lại các khóa và giá trị của từng mục trong đối tượng Bản đồ chuỗi của chúng tôi khi chúng tôi sử dụng keys() và các giá trị Counter() các phương pháp trên.

Ngoài ra, bạn có thể thêm từ điển mới vào đối tượng ChainMap bằng cách sử dụng new_child() phương pháp. Giả sử đầu bếp bánh mì sandwich của chúng tôi đang thử món bánh mì sandwich mới trong thực đơn thử nghiệm và muốn thêm hai món trong số chúng vào thực đơn mới của chúng tôi. Chúng tôi có thể sử dụng mã sau để đạt được mục tiêu này:

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

Mã của chúng tôi trả về Bản đồ chuỗi được cập nhật với bánh mì mới của chúng tôi ở đầu từ điển, như sau:

ChainMap({'Veggie Deluxe': '$3.00', 'House Club Special': '$3.65'}, {'BLT': '$3.05', 'Roast Beef': '$3.55', 'Cheese': '$2.85', 'Shrimp': '$3.55', 'Ham': '$2.85'}, {'Steak': '$3.60', 'Tuna Special': '$3.20', 'Turkey Club': '$3.20'})

Kết luận

Chúng ta có thể sử dụng mô-đun tập hợp Python để mở rộng các tập hợp tích hợp được cung cấp bởi Python và để truy cập các phương pháp cấu trúc dữ liệu tùy chỉnh. Điều này hữu ích nếu bạn đang tìm cách làm việc với kiểu dữ liệu thu thập, chẳng hạn như danh sách hoặc một bộ, nhưng cần thực hiện một chức năng nhất định không có trong vani (hoặc plain ) Python.

Trong hướng dẫn này, sử dụng các ví dụ, chúng tôi đã chia nhỏ cách sử dụng bộ sưu tập trong Python và thảo luận về bốn phương pháp chính được cung cấp bởi thư viện:Counter , namedtuple , defaultdictChainMap .

Giờ đây, bạn đã được trang bị kiến ​​thức cần thiết để bắt đầu làm việc với mô-đun bộ sưu tập Python như một chuyên gia!

Bạn có tò mò muốn biết cách học Python có thể giúp bạn thành công trong lĩnh vực công nghệ không? Tải xuống ứng dụng Career Karma miễn phí ngay hôm nay và trò chuyện với một trong những huấn luyện viên nghề nghiệp chuyên nghiệp của chúng tôi!