Tìm hiểu cách cấu trúc dữ liệu từ điển của Python hoạt động như một cách mạnh mẽ và linh hoạt để lưu trữ và truy xuất các đối tượng và dữ liệu trong ứng dụng của bạn Show
Nhà văn cao cấp, InfoWorld. Maria Vonotna/Shutterstock Mục lục Cho xem nhiều hơn Tất cả các ngôn ngữ lập trình đều có nhiều cấu trúc dữ liệu khác nhau, mỗi cấu trúc phù hợp với các loại công việc cụ thể. Trong số các cấu trúc dữ liệu được tích hợp trong Python, nổi bật là từ điển hoặc Python 7. Từ điển Python là một cách nhanh chóng, linh hoạt để lưu trữ và truy xuất dữ liệu theo tên hoặc thậm chí là một loại đối tượng phức tạp hơn, thay vì chỉ một số chỉ mụcTừ điển Python bao gồm một hoặc nhiều khóa—một đối tượng như chuỗi hoặc số nguyên. Mỗi khóa được liên kết với một giá trị, có thể là bất kỳ đối tượng Python nào. Bạn sử dụng một khóa để lấy các giá trị liên quan của nó và thời gian tra cứu cho mỗi cặp khóa/giá trị rất không đổi. Trong các ngôn ngữ khác, loại cấu trúc dữ liệu này đôi khi được gọi là bản đồ băm hoặc mảng kết hợp Trong bài viết này, chúng ta sẽ tìm hiểu những kiến thức cơ bản về từ điển Python, bao gồm cách sử dụng chúng, các tình huống mà chúng có ý nghĩa cũng như một số vấn đề và cạm bẫy phổ biến cần lưu ý. [ Cũng trên InfoWorld. 4 chìa khóa để viết Python hiện đại vào năm 2022 ]Làm việc với từ điển PythonHãy bắt đầu với một ví dụ đơn giản về từ điển Python
Trong từ điển này, tên phim là chìa khóa và năm phát hành là giá trị. Cấu trúc 8 có thể được lặp đi lặp lại vô thời hạnVí dụ mà chúng ta thấy ở đây được gọi là từ điển theo nghĩa đen—một cấu trúc từ điển được mã hóa cứng vào mã nguồn của chương trình. Bạn cũng có thể tạo hoặc sửa đổi từ điển theo chương trình, như bạn sẽ thấy ở phần sau Các phím trong từ điểnKhóa từ điển Python có thể gần như bất kỳ đối tượng Python nào. Tôi nói "gần như" bởi vì đối tượng được đề cập phải có thể băm được, nghĩa là nó phải có giá trị băm (đầu ra của phương thức 9 của nó) không thay đổi trong suốt thời gian tồn tại của nó và có thể được so sánh với các đối tượng khácBất kỳ đối tượng Python có thể thay đổi nào đều không có giá trị băm nhất quán trong suốt thời gian tồn tại của nó và do đó không thể được sử dụng làm khóa. Chẳng hạn, một danh sách không thể là một khóa, bởi vì các phần tử có thể được thêm vào hoặc xóa khỏi danh sách. Tương tự như vậy, bản thân từ điển không thể là chìa khóa vì lý do tương tự. Nhưng một bộ dữ liệu có thể là một khóa, bởi vì một bộ dữ liệu là bất biến và do đó có hàm băm nhất quán trong suốt thời gian tồn tại của nó Các chuỗi, số (số nguyên và số float giống nhau), bộ dữ liệu và các đối tượng đơn lẻ tích hợp sẵn ( 0, 1 và 2) đều là những loại phổ biến được sử dụng làm khóaMột khóa nhất định là duy nhất cho một từ điển nhất định. Không thể sử dụng bội số của cùng một khóa. Nếu bạn muốn có một khóa trỏ đến nhiều giá trị, thì bạn nên sử dụng cấu trúc như danh sách, bộ hoặc thậm chí một từ điển khác làm giá trị. (Thông tin thêm về điều này trong thời gian ngắn. ) Giá trị trong từ điểnCác giá trị trong từ điển có thể là bất kỳ đối tượng Python nào. Dưới đây là một số ví dụ về các giá trị
Một lần nữa, để lưu trữ nhiều giá trị trong một khóa, chỉ cần sử dụng loại vùng chứa—danh sách, từ điển hoặc bộ—làm giá trị. Trong ví dụ trên, các phím 3 và 4 giữ các danh sách và từ điển tương ứng. Bằng cách này, bạn có thể tạo các cấu trúc lồng nhau ở bất kỳ độ sâu nào cần thiếtTạo từ điển mớiBạn có thể tạo một từ điển trống mới bằng cách khai báo đơn giản
Bạn cũng có thể sử dụng 5 tích hợp sẵn để tạo một từ điển mới từ một chuỗi các cặp 2Một cách khác để xây dựng từ điển là hiểu từ điển, trong đó bạn chỉ định các khóa và giá trị từ một chuỗi 3Nhận và đặt các khóa và giá trị từ điểnĐể truy xuất một giá trị từ từ điển, bạn sử dụng cú pháp lập chỉ mục của Python 4Nếu bạn có một vùng chứa dưới dạng giá trị và bạn muốn truy xuất một giá trị lồng nhau—tức là giá trị nào đó từ bên trong vùng chứa—bạn có thể truy cập trực tiếp vào vùng chứa đó bằng cách lập chỉ mục (nếu được hỗ trợ) hoặc bằng cách sử dụng chỉ định quảng cáo xen kẽ 5Đặt giá trị trong từ điển đủ đơn giản 6sử dụng. get() để truy xuất các giá trị từ điển một cách an toànNếu bạn cố truy xuất một giá trị bằng một khóa không tồn tại trong một từ điển nhất định, bạn sẽ đưa ra một ngoại lệ 6. Một cách phổ biến để xử lý loại truy xuất này là sử dụng khối 7. Một cách thanh lịch hơn để tìm khóa có thể không có ở đó là phương pháp 8Phương thức 8 trên từ điển cố gắng tìm một giá trị được liên kết với một khóa đã cho. Nếu không có giá trị như vậy tồn tại, nó sẽ trả về 2 hoặc giá trị mặc định mà bạn chỉ định. Trong một số trường hợp, bạn sẽ muốn đưa ra lỗi một cách rõ ràng, nhưng phần lớn thời gian bạn sẽ chỉ muốn cung cấp một giá trị mặc định lành mạnh. 2Khi nào nên sử dụng từ điển PythonSử dụng từ điển Python có ý nghĩa nhất trong các điều kiện sau
Gotchas cho các giá trị trong từ điểnCó một vài đặc điểm đáng lưu ý về cách các giá trị hoạt động trong từ điển Đầu tiên, nếu bạn sử dụng tên biến làm giá trị, thì những gì được lưu trữ dưới khóa đó là giá trị chứa trong biến tại thời điểm giá trị từ điển được xác định. Đây là một ví dụ 4Trong trường hợp này, chúng tôi đặt 22 thành số nguyên 23 trước khi xác định từ điển. Khóa 24 sẽ chứa giá trị 23. Nhưng nếu chúng ta thay đổi 22 sau khi từ điển được xác định, thì nội dung của khóa 24 sẽ không thay đổi. (Quy tắc này cũng áp dụng cho danh sách Python và các loại vùng chứa khác trong Python. )Một quy tắc tương tự áp dụng cho cách các đầu ra của hàm hoạt động như các giá trị từ điển. Đối với khóa 28, chúng tôi có 29. Điều này có nghĩa là khi từ điển được xác định, 29 được thực thi và giá trị trả về được sử dụng làm giá trị cho 28. Nhưng 29 không được thực hiện lại mỗi khi chúng tôi truy cập khóa 28. Giá trị đó sẽ vẫn như khi nó được tạo lần đầu tiênNếu muốn chạy lại 29 mỗi khi truy cập khóa đó, chúng ta cần thực hiện một cách tiếp cận khác—một cách tiếp cận cũng có những cách sử dụng khácGọi các đối tượng hàm trong từ điểnCác đối tượng chức năng có thể được lưu trữ trong từ điển dưới dạng giá trị. Điều này cho phép chúng tôi sử dụng từ điển để thực thi một trong các lựa chọn chức năng dựa trên một số phím—một cách phổ biến để mô phỏng chức năng 35 được tìm thấy trong các ngôn ngữ khácĐầu tiên, chúng tôi lưu trữ đối tượng chức năng trong từ điển, sau đó chúng tôi truy xuất và thực thi nó 0Lưu ý rằng chúng ta cần xác định các chức năng trước, sau đó liệt kê chúng trong từ điển Ngoài ra, Python kể từ phiên bản 3. 10 có một tính năng gọi là khớp mẫu cấu trúc giống như các câu lệnh 35 thông thường. Nhưng trong Python, nó được dùng để khớp với các cấu trúc hoặc tổ hợp các loại, không chỉ các giá trị đơn lẻ. Nếu bạn muốn sử dụng một giá trị để thực hiện một hành động hoặc chỉ trả về một giá trị khác, hãy sử dụng từ điển[ Cũng trên InfoWorld. Nhận video giới thiệu về khớp mẫu cấu trúc ]Lặp lại thông qua từ điểnNếu bạn cần lặp lại một từ điển để kiểm tra tất cả các khóa hoặc giá trị của nó, có một số cách khác nhau để thực hiện. Phổ biến nhất là sử dụng vòng lặp 37 trên từ điển—e. g. , 38. Điều này mang lại các khóa trong từ điển, sau đó có thể được sử dụng để truy xuất các giá trị nếu cần 1Cuộc gọi này sẽ mang lại 39, sau đó là 40Thay vào đó, nếu chúng ta sử dụng như sau 2chúng tôi sẽ nhận được 41 và 42. Trong trường hợp này, chúng tôi đang sử dụng các khóa để lấy các giá trịNếu chúng ta chỉ muốn các giá trị, chúng ta có thể lặp lại bằng phương thức 43 có sẵn trên từ điển 3Cuối cùng, chúng ta có thể lấy cả khóa và giá trị cùng nhau bằng phương thức 44 4Đặt hàng trong từ điển PythonMột điều bạn có thể nhận thấy khi lặp qua từ điển là các khóa thường được trả về theo thứ tự mà chúng được chèn vào Điều này không phải lúc nào cũng đúng. Trước Python 3. 6, các mục trong từ điển sẽ không được trả về theo bất kỳ thứ tự cụ thể nào nếu bạn lặp qua chúng. Phiên bản 3. 6 đã giới thiệu một thuật toán từ điển mới và hiệu quả hơn, thuật toán này giữ lại thứ tự chèn cho các khóa như một tác dụng phụ thuận tiện Trước đây, Python đã cung cấp loại này như một cách để xây dựng từ điển giữ nguyên thứ tự chèn. 45 vẫn có sẵn trong thư viện tiêu chuẩn, chủ yếu là do nhiều phần mềm hiện có sử dụng nó và cũng bởi vì nó hỗ trợ các phương thức vẫn chưa có sẵn với các ký tự thông thường. Chẳng hạn, nó cung cấp 46 để trả về các khóa từ điển theo thứ tự chèn ngược lại, điều mà các từ điển thông thường không làm đượcXóa các mục khỏi từ điểnĐôi khi bạn cần xóa hoàn toàn một cặp khóa/giá trị khỏi từ điển. Đối với điều này, hãy sử dụng 47 tích hợp sẵn 5Điều này loại bỏ cặp khóa/giá trị 48 khỏi ví dụ của chúng tôi ở đầu bài viếtLưu ý rằng việc đặt khóa hoặc giá trị thành 2 không giống như xóa các phần tử đó khỏi từ điển. Chẳng hạn, lệnh 50 sẽ chỉ đặt giá trị của khóa đó thành 2; Tìm khóa theo giá trịMột câu hỏi phổ biến với từ điển là liệu có thể tìm thấy khóa bằng cách tra cứu giá trị hay không. Câu trả lời ngắn gọn là không—ít nhất, không phải không lặp qua các cặp khóa/giá trị để tìm đúng giá trị (và do đó, khóa phù hợp đi cùng với nó) Nếu bạn thấy mình ở trong tình huống cần tìm khóa theo giá trị của chúng, cũng như giá trị theo cách của khóa, hãy cân nhắc giữ hai từ điển, trong đó một trong số chúng có khóa và giá trị đảo ngược. Tuy nhiên, bạn không thể làm điều này nếu các giá trị bạn đang lưu trữ không thể băm được. Trong trường hợp như vậy, bạn sẽ phải dùng đến việc lặp lại từ điển—hoặc tốt hơn hết là tìm một giải pháp nhẹ nhàng hơn cho vấn đề mà bạn đang thực sự cố gắng giải quyết Từ điển vs. bộCuối cùng, Python có một cấu trúc dữ liệu khác, tập hợp, bề ngoài giống như một từ điển. Hãy nghĩ về nó như một từ điển chỉ có các khóa, nhưng không có giá trị. Cú pháp của nó cũng tương tự như từ điển 6Tuy nhiên, các bộ không phải để lưu trữ thông tin được liên kết với một khóa nhất định. Chúng được sử dụng chủ yếu để lưu trữ các giá trị có thể băm theo cách có thể nhanh chóng kiểm tra sự hiện diện hay vắng mặt của chúng. Ngoài ra, các bộ không duy trì thứ tự chèn vì mã mà chúng sử dụng không giống với mã được sử dụng để tạo từ điển Có liên quan
Serdar Yegulalp là một nhà văn cao cấp tại InfoWorld, tập trung vào học máy, container hóa, devops, hệ sinh thái Python và đánh giá định kỳ Đối tượng Python có phải là từ điển không?Cuối cùng, hầu hết các đối tượng trong Python thực ra chỉ là từ điển .
Các từ điển Python có giống như các đối tượng không?Đối tượng và từ điển là tương tự nhau; . Trong JavaScript, từ điển được gọi là đối tượng, trong khi trong các ngôn ngữ như Python hoặc C#, chúng được gọi là từ điển .
Giá trị từ điển Python có thể là đối tượng không?Khóa từ điển phải là đối tượng bất biến. Giá trị từ điển có thể là bất kỳ đối tượng nào .
Các đối tượng có thể là khóa từ điển Python không?Hầu hết mọi loại giá trị đều có thể được sử dụng làm khóa từ điển trong Python. Bạn thậm chí có thể sử dụng các đối tượng tích hợp sẵn như kiểu và hàm . |