Mặc định Python
Trong bài viết nhỏ này, tôi muốn chỉ cho bạn một tính năng nhỏ giúp quá trình phát triển của bạn hiệu quả hơn Show
Tôi sẽ chỉ cho bạn defaultdict() là gì và sự khác biệt giữa dict() và defaultdict() với các ví dụ Tại đây bạn có thể xem video về defaultdict()dict() so với defaultdict()Defaultdict là một từ điển giống như vùng chứa có trong các bộ sưu tập mô-đun. Defaultdict là một lớp con của lớp từ điển trả về một đối tượng giống như từ điển. Chức năng của cả hai từ điển và defaultdict gần như giống nhau ngoại trừ thực tế là defaultdict không bao giờ gây ra lỗi KeyError. Nó cung cấp một giá trị mặc định cho khóa không tồn tại Cú pháp. defaultdict(default_factory)
Trên thực tế, bạn biết nếu bạn cố thêm một giá trị vào từ điển có khóa bị thiếu, bạn sẽ gặp lỗi KeyError certificates = {} Để tránh lỗi bạn có thể xây dựng câu lệnh “if” sau for index, value in enumerate(grades): Nhưng bạn có thể làm cho mã của mình rõ ràng nhất bằng cách sử dụng defaultdict() from collections import defaultdict Trong ví dụ trên, chúng tôi đặt default_factory làm danh sách và nếu chúng tôi gọi khóa bị thiếu, chúng tôi sẽ nhận được một danh sách trống [] làm giá trị mặc định của khóa bị thiếu. Ngoài ra, chúng tôi có thể đặt bất kỳ loại dữ liệu nào. int, str, dict, float, set, tuple, danh sách Hãy thử tất cả các loại dữ liệu này và kiểm tra kết quả test_dict = defaultdict(int) Ngoài ra, bạn có thể đặt giá trị mặc định của riêng mình. default_factory phải có thể gọi được để chúng ta có thể thực hiện tiếp theo test_dict = defaultdict(lambda: “Default value by lambda”) HOẶC def test_function(): NHƯNG nếu bạn không đặt default_factory thì nó sẽ là Không có và trong trường hợp này, nếu bạn cố gọi một khóa bị thiếu, bạn sẽ gặp lỗi KeyError Trong hướng dẫn này, bạn sẽ tìm hiểu về các đối tượng defaultdict của Python, là một phần của thư viện 5. Đối tượng sẽ ghi đè hành vi từ điển mặc định là ném một 6 khi bạn cố gắng truy cập một khóa không tồn tạiBạn sẽ có một cái nhìn tổng quan đầy đủ về defaultdict và nó khác với từ điển Python thông thường như thế nào. Bạn cũng sẽ học cách xử lý chung các lỗi bị thiếu trong Python. Cuối cùng, bạn sẽ học cách sử dụng đối tượng defaultdict và cách sử dụng nó để đếm dữ liệu, nhóm dữ liệu và tích lũy dữ liệu Mục lục
Từ điển Python xử lý các phím bị thiếu như thế nào?Từ điển Python là cấu trúc dữ liệu quan trọng lưu trữ dữ liệu theo cặp 7. Từ điển được gọi là mảng kết hợp vì mỗi khóa được liên kết với một giá trị. Khi chúng tôi cố gắng truy cập giá trị của khóa trong từ điển Python, chúng tôi có thể truy cập trực tiếp giá trị của nó bằng cách sử dụng dấu ngoặc vuông xung quanh khóa của nóHãy xem cách truy cập giá trị của khóa từ từ điển Python
Bây giờ, hãy xem điều gì sẽ xảy ra khi chúng ta cố truy cập vào một khóa không tồn tại
Chúng ta có thể thấy rằng khi chúng ta cố gắng truy cập một khóa không tồn tại, Python sẽ tạo ra một 6. Điều này sẽ khiến chương trình của bạn gặp sự cố trừ khi lỗi được xử lý trực tiếpPython cung cấp một số cách để tránh điều này – hãy khám phá chúng tại đây sử dụng. get() để xử lý các khóa từ điển bị thiếuChúng ta có thể sử dụng phương pháp 9 từ điển để ngăn chặn một 6 được nâng lên khi khóa từ điển không tồn tại. Nếu chúng ta cố gắng truy cập giá trị của khóa không tồn tại bằng phương thức 9, thì phương thức này chỉ trả về giá trị for index, value in enumerate(grades): 52. Hãy xem nó trông như thế nàofor index, value in enumerate(grades): 5Sử dụng try-ngoại trừ để xử lý các khóa từ điển bị thiếuTương tự như ví dụ trên, chúng ta có thể ngắt truy cập các giá trị từ điển của mình trong một khối thử-ngoại trừ. Điều này cho phép chúng tôi xử lý trực tiếp 6 được nâng lên khi khóa không tồn tại. Hãy xem nó trông như thế nàofor index, value in enumerate(grades): 8sử dụng. defaultvalue() để xử lý các khóa từ điển bị thiếuTừ điển Python cũng cung cấp một phương thức, for index, value in enumerate(grades): 54, cho phép chúng ta đặt giá trị mặc định cho một khóa. Phương thức này đặt giá trị mặc định khi khóa không tồn tại và trả về giá trị đó. Hãy xem làm thế nào chúng ta có thể sử dụng nófrom collections import defaultdict0 Vấn đề với phương pháp này là chúng ta cần biết khóa mà chúng ta muốn tạo giá trị mặc định. Điều này vẫn đòi hỏi một lượng kế hoạch hợp lý và không tính đến các trường hợp bên lề Các lựa chọn thay thế cho các phương pháp này là gì?Sau khi đọc các tùy chọn này, bạn có thể nghĩ rằng bạn không cần bất cứ điều gì khác biệt hoặc một số lựa chọn thay thế phù hợp cho các phương pháp này là gì. Đây là nơi mà for index, value in enumerate(grades): 55 xuất hiện. Nó cung cấp một cách rõ ràng, an toàn để cung cấp các giá trị mặc định cho bất kỳ khóa bị thiếu nào mà không cần phải tạo nó trước. Hãy cùng tìm hiểu về for index, value in enumerate(grades): 55 và nhiều lợi ích của nóMặc định của Python là gì?Python for index, value in enumerate(grades): 55 là một lớp thuộc thư viện 5, là một phần của thư viện Python chuẩn. Điều này có nghĩa là bạn không cần phải thực sự cài đặt bất cứ thứ gì để sử dụng nóChúng ta có thể sử dụng lớp bằng cách nhập nó vào chương trình của mình from collections import defaultdict5 Lớp for index, value in enumerate(grades): 55 là một lớp con của lớp for index, value in enumerate(grades): 80 trong Python. Điều này có nghĩa là nó chia sẻ nhiều thuộc tính giống nhau của lớp từ điển, nhưng cũng sửa đổi và mở rộng một số chức năng của nóNhững thay đổi chính đối với lớp từ điển là
Điều này có ý nghĩa gì với bạn? . Hàm có thể gọi for index, value in enumerate(grades): 84 có thể nhận bất kỳ hàm có thể gọi hợp lệ nào (chẳng hạn như for index, value in enumerate(grades): 87, for index, value in enumerate(grades): 88, v.v. ) hoặc for index, value in enumerate(grades): 52 và sẽ sử dụng loại đó làm loại mặc định để tạo khi không có khóa nào tồn tạiTrong phần này, bạn đã tìm hiểu lớp Python for index, value in enumerate(grades): 55 là gì và nó khác với từ điển Python thông thường như thế nào. Trong phần tiếp theo, bạn sẽ bắt đầu làm việc với các đối tượng này để xử lý dữ liệu bị thiếu tốt hơn và mở rộng khả năng làm việc với từ điển của bạnCách tạo một defaultdict PythonTrong phần này, bạn sẽ tìm hiểu cách tạo một đối tượng for index, value in enumerate(grades): 55 bằng cách sử dụng mô-đun 5 trong Python. Như hình trên chúng ta có thể import class dễ dàng mà không cần lo cài đặt. Điều này là do mô-đun là một phần của thư viện chuẩn và sẽ được cài đặt cùng với PythonHãy xem cách chúng ta có thể tạo một for index, value in enumerate(grades): 55test_dict = defaultdict(lambda: “Default value by lambda”) 1Ở đây, chúng tôi đã tạo một for index, value in enumerate(grades): 55 được gọi là mặc định. Để tạo thành công từ điển, chúng ta cần chuyển vào một giá trị có thể gọi hợp lệ. Các cuộc gọi này là cách tạo đối tượng, chẳng hạn như số nguyên, danh sách, v.v. Điều quan trọng là sử dụng khả năng gọi được, thay vì chức năngtest_dict = defaultdict(lambda: “Default value by lambda”) 3Ta có thể thấy khi truyền vào hàm from collections import defaultdict05, chương trình sẽ tăng một giá trị from collections import defaultdict06 Bây giờ chúng ta có thể sử dụng for index, value in enumerate(grades): 55 theo nhiều cách giống như chúng ta sử dụng từ điển Python bình thường. Ví dụ: chúng ta có thể gán một cặp khóa-giá trị mới cho từ điểntest_dict = defaultdict(lambda: “Default value by lambda”) 7Trong phần này, bạn đã học cách tạo một for index, value in enumerate(grades): 55 bằng Python và cách thêm các cặp khóa-giá trị vào đó. Trong phần tiếp theo, bạn sẽ học cách sử dụng các từ điển này để xử lý các khóa bị thiếuXử lý các phím bị thiếu với Python defaultdictTrong phần này, bạn sẽ tìm hiểu cách xử lý các khóa bị thiếu với Python for index, value in enumerate(grades): 55. Trước đây, bạn đã học được rằng khi tạo một defaultdict mới, bạn phải chuyển vào một loại giá trị mặc định mới. Điều này cho phép chúng tôi xử lý dữ liệu bị thiếu khi cố gắng truy cập một khóa bị thiếu. Hãy xem nó trông như thế nàodef test_function():0 Chúng ta có thể thấy từ ví dụ trên rằng chúng ta có thể truy cập vào một khóa không tồn tại và giá trị 0 được trả về. Chúng ta có thể chuyển các callables cho for index, value in enumerate(grades): 87, for index, value in enumerate(grades): 88, from collections import defaultdict52 và from collections import defaultdict53. Trong phần tiếp theo, bạn sẽ học cách sử dụng đối tượng for index, value in enumerate(grades): 55 để đếm các mục trong danh sáchĐếm các mục trong danh sách bằng Python defaultdictMột trong những cách sử dụng sáng tạo cho đối tượng for index, value in enumerate(grades): 55 là khả năng đếm các mục một cách hiệu quả trong một lần lặp và trả lại số đếm trong từ điển. Trước khi chúng ta đi sâu vào cách triển khai điều này với đối tượng for index, value in enumerate(grades): 55, hãy xem cách chúng ta có thể triển khai điều này với một từ điển thông thường 0Trong đoạn mã trên, chúng ta cần bao gồm câu lệnh if-else để giải thích cho trường hợp khóa không tồn tại trong từ điển của chúng ta Chúng ta có thể đơn giản hóa điều này rất nhiều bằng cách sử dụng đối tượng for index, value in enumerate(grades): 55. Chúng tôi có thể khởi tạo một số nguyên làm khóa mặc định của mình và chúng tôi có thể tăng các khóa của mình một cách an toàn, ngay cả khi chúng không tồn tại trước đó. Hãy xem cái này trông như thế nào 1Những gì chúng tôi đã làm ở đây là khởi tạo một đối tượng for index, value in enumerate(grades): 55, chuyển vào giá trị số nguyên có thể gọi được. Điều này có nghĩa là nếu khóa không tồn tại thì giá trị sẽ được gán 0. Do đó, khi chúng tôi gặp một khóa không tồn tại, chúng tôi có thể tăng giá trị của nó lên 1 một cách an toàn. Mã này sạch hơn đáng kể so với cách triển khai ngây thơ của chúng tôi bằng cách sử dụng từ điển thông thườngNhóm dữ liệu với Python defaultdictChúng ta có thể sử dụng đối tượng for index, value in enumerate(grades): 55 để nhóm dữ liệu dựa trên các cấu trúc dữ liệu khác. Với điều này, chúng ta có thể lặp lại một số đối tượng, chẳng hạn như danh sách các bộ dữ liệu, một từ điển khác hoặc một tập hợp các danh sách để nhóm dữ liệu theo những cách có ý nghĩaHãy xem một ví dụ. Nếu chúng tôi có một từ điển tên của mọi người và quê hương của họ, chúng tôi có thể tạo một từ điển chứa vị trí của chúng tôi dưới dạng khóa và những người từ vị trí đó dưới dạng danh sách. Điều này cho phép chúng tôi lấy một bảng như bên dưới và chuyển đổi nó thành một từ điển với vị trí của mọi người và những người sống ở đó NgườiQuê hươngNikTorontoKateTorontoEvanLondonKyraNew YorkJaneNew YorkBảng giá trị ban đầu của chúng tôiChúng ta có thể biến bảng này thành như sau HometownPeopleTorontotest_dict = defaultdict(lambda: “Default value by lambda”) 10Londontest_dict = defaultdict(lambda: “Default value by lambda”) 11New Yorktest_dict = defaultdict(lambda: “Default value by lambda”) 12Cấu trúc dữ liệu kết quảTrước khi chúng ta xem cách triển khai điều này với đối tượng for index, value in enumerate(grades): 55, hãy xem cách thực hiện điều này với từ điển Python thông thường 2Chúng ta có thể thấy rằng đây là một chút phức tạp hơn so với ví dụ trước của chúng tôi. Rất may, for index, value in enumerate(grades): 55 làm cho điều này dễ dàng hơn nhiều. Bởi vì chúng tôi có thể đặt giá trị mặc định thành danh sách trống, chúng tôi có thể xóa câu lệnh test_dict = defaultdict(lambda: “Default value by lambda”) 15. Hãy xem cách thức hoạt động của nó 3Chúng ta có thể thấy ví dụ này dễ hiểu hơn bao nhiêu vì chúng ta không cần lo lắng về việc xử lý lỗi. for index, value in enumerate(grades): 55 của chúng tôi sẽ khởi tạo một danh sách trống mỗi khi khóa không tồn tại. Do đó, chúng ta có thể dễ dàng thêm vào giá trị của khóa mà không cần lo lắng về việc test_dict = defaultdict(lambda: “Default value by lambda”) 17 bị némTích lũy dữ liệu với Python defaultdictTrong phần cuối cùng này, bạn sẽ học cách tích lũy dữ liệu với Python for index, value in enumerate(grades): 55. Ví dụ này khá giống với ví dụ đếm, ngoại trừ chúng ta sẽ khởi tạo một số float làm giá trị mặc định. Hãy tưởng tượng rằng bạn đang theo dõi chi tiêu của mình trong các danh mục khác nhau và muốn cộng tổng số tiền chi tiêu cho các danh mục nàyDữ liệu của bạn được lưu trữ trong một danh sách các bộ dữ liệu, trong đó giá trị đầu tiên là danh mục và giá trị thứ hai là số tiền đã chi tiêu. Chúng ta hãy xem làm thế nào chúng ta có thể làm cho công việc này 4Chúng ta có thể thấy cách tiếp cận này gần giống với ví dụ đầu tiên của chúng ta, ngoại trừ việc chúng ta đang truy cập giá trị của một mục thay vì chỉ đếm một giá trị Phần kết luậnTrong hướng dẫn này, bạn đã học về đối tượng for index, value in enumerate(grades): 55 trong Python. Bạn đã bắt đầu bằng cách tìm hiểu cách từ điển Python phản hồi với các khóa bị thiếu và cách bạn có thể xử lý các khóa bị thiếu này mà không làm hỏng chương trình của bạn. Sau đó, bạn đã học cách sử dụng Python for index, value in enumerate(grades): 55 để cung cấp các giá trị mặc định. Cuối cùng, bạn đã học được ba ví dụ phức tạp về cách sử dụng đối tượng for index, value in enumerate(grades): 55 để đếm, nhóm và tích lũy dữ liệu
Defaultdict trong Python là gì?Defaultdict là một phần con của lớp dict . Tầm quan trọng của nó nằm ở chỗ nó cho phép mỗi khóa mới được cung cấp một giá trị mặc định dựa trên loại từ điển được tạo. Có thể tạo một defaultdict bằng cách khai báo một đối số có thể có ba giá trị; .
Làm thế nào để Defaultdict hoạt động Python?Một defaultdict hoạt động chính xác như một dict bình thường, nhưng nó được khởi tạo với một hàm (“nhà máy mặc định”) không nhận đối số và cung cấp giá trị mặc định cho một khóa không tồn tại< . Một defaultdict sẽ không bao giờ tăng KeyError. Bất kỳ khóa nào không tồn tại đều nhận giá trị được trả về bởi nhà máy mặc định. . A defaultdict will never raise a KeyError. Any key that does not exist gets the value returned by the default factory.
Sự khác biệt giữa Defaultdict và dict là gì?Sự khác biệt là một defaultdict sẽ "mặc định" một giá trị nếu khóa đó chưa được đặt. Nếu bạn không sử dụng defaultdict, bạn phải kiểm tra xem khóa đó có tồn tại không và nếu không, hãy đặt nó thành thứ bạn muốn
Defaultdict có nhanh hơn dict không?Do đó defaultdict có vẻ hiệu quả hơn dict. lấy phương thức. Rõ ràng ở đây cũng defaultdict có vẻ hiệu quả hơn dict. get và thử nghiệm cho thấy rằng defaultdict nhanh hơn hai lần so với dict |