Bạn có thể xóa phần tử trùng lặp từ Python dùng dict.fromkeys(), tạo từ điển loại bỏ mọi giá trị trùng lặp. Bạn cũng có thể chuyển danh sách thành tập hợp (set). Bạn phải chuyển từ điển hoặc tập hợp ngược lại thành danh sách để thấy danh sách đã loại bỏ trùng lặp.
Khi bạn làm việc với danh sách trong Python, có thể có tình huống bạn muốn xóa các bản sao khỏi danh sách. Ví dụ, bạn là đầu bếp đang gộp menu cũ và mới cho nhà hàng. Bạn có thể muốn xóa các bản trùng lặp xảy ra khi kết hợp hai menu.
Hướng dẫn này sẽ bao gồm việc dùng phương thức dict.fromkeys() chuyển danh sách thành tập hợp. Chúng ta sẽ thảo luận cách chuyển đổi đầu ra từ hai phương thức này ngược lại thành danh sách để bạn có thể hiểu dữ liệu như danh sách.
Python Xóa trùng lặp khỏi List
Bạn có thể xóa trùng lặp dùng tập hợp (set) Python hoặc phương thức dict.fromkeys().
Phương thức dict.fromkeys() chuyển danh sách thành từ điển. Từ điển không thể chứa giá trị trùng lặp nên từ điển chỉ có giá trị duy nhất được trả về bởi dict.fromkeys().
Tập hợp (sets), giống như từ điển, không thể chứa giá trị trùng lặp. Nếu chúng ta chuyển danh sách thành tập hợp, tất cả các bản sao đều bị loại bỏ.
Python Xóa trùng lặp khỏi List: dict.fromkeys()
Từ điển Python lưu trữ dữ liệu theo cấu trúc khóa/giá trị. Từ điển ánh xạ khóa đến giá trị và tạo cặp lưu trữ dữ liệu trong Python.
Từ điển trong Python không thể bao gồm khóa trùng lặp. Nếu chúng ta chuyển danh sách của mình thành từ điển, nó sẽ loại bỏ mọi giá trị trùng lặp. Đó là lúc phương thức fromkeys() xuất hiện.
Ví dụ dict.fromkeys()
fromkeys() là hàm tích hợp sẵn tạo từ điển từ các khóa bạn chỉ định. Vì từ điển không thể bao gồm khóa trùng lặp, hàm sẽ loại bỏ mọi giá trị trùng lặp từ danh sách của chúng ta. Sau đó, chúng ta có thể chuyển từ điển ngược lại thành danh sách.
Cú pháp cho phương thức fromkeys() như sau:
dictionary_name.fromkeys(keys, value)
fromkeys nhận hai tham số: keys và value. Tham số keys là đối tượng có thể lặp, chỉ định khóa của từ điển mới bạn muốn tạo. Tham số value là tùy chọn và giữ giá trị cho tất cả khóa. Chúng ta không cần tham số này cho ví dụ này, nên sẽ bỏ qua.
Giả sử chúng ta là đầu bếp đang gộp menu pizza cũ và mới thành một menu lớn. Menu mới bao gồm nhiều pizza mới chúng ta đã làm việc几个月. Nhưng, chúng ta muốn cung cấp pizza trên menu cũ. Chúng ta không muốn bản sao xuất hiện trên menu, vì đó sẽ làm khách hàng bối rối.
Để xóa bất kỳ bản sao nào có thể tồn tại trong menu mới, chúng ta có thể dùng mã sau:
new_menu = ['Hawaiian', 'Margherita', 'Mushroom', 'Prosciutto', 'Meat Feast', 'Hawaiian', 'Bacon', 'Black Olive Special', 'Sausage', 'Sausage'] final_new_menu = list(dict.fromkeys(new_menu)) print(final_new_menu)
Mã của chúng ta xóa các phần tử trùng lặp và trả về:
['Hawaiian', 'Margherita', 'Mushroom', 'Prosciutto', 'Meat Feast', 'Bacon', 'Black Olive Special', 'Sausage']
Ở dòng đầu, chúng ta khai báo biến Python tên new_menu lưu trữ tất cả pizza trên menu mới. Lưu ý danh sách này chứa giá trị trùng lặp — cả Sausage và Hawaiian xuất hiện hai lần trong danh sách Python.
Chúng ta dùng phương thức dict.fromkeys() để tạo từ điển từ biến new_menu. Tiếp theo, dùng list() để chuyển dữ liệu từ từ điển thành mảng Python, hoặc danh sách. Ở dòng cuối mã, chúng ta in danh sách đã sửa đổi.
Như bạn thấy, chương trình đã xóa giá trị trùng lặp khỏi dữ liệu, và Sausage và Hawaiian xuất hiện một lần trong danh sách mới.
Xóa trùng lặp khỏi List Python: Sets (Tập hợp)
Đối tượng tập hợp (set) Python là cấu trúc dữ liệu vừa không có thứ tự (unordered) vừa không có chỉ mục (unindexed). Tập hợp lưu trữ các mục duy nhất trong Python. Khác với danh sách, tập hợp không thể lưu giá trị trùng lặp.
Vì vậy, vì tập hợp không thể lưu mục trùng lặp, chúng ta có thể chuyển danh sách thành tập hợp để loại bỏ chúng. Trong Python, tập hợp là danh sách các mục phân cách bằng dấu phẩy nằm trong ngoặc nhọn. Ví dụ tập hợp trong Python lưu danh sách pizza:
pizzas = ('Margherita', 'Hawaiian', 'Mushroom', 'Meat Feast')
Ví dụ xóa trùng lặp dùng Set
Hãy lấy ví dụ từ trên để minh họa cách tập hợp có thể dùng để xóa giá trị trùng lặp khỏi danh sách.
Giả sử chúng ta là đầu bếp pizza muốn gộp cả menu cũ và mới. Nhưng có thể có bản sao giữa các menu này, chúng ta sẽ muốn xóa trước khi tạo menu cuối cùng. Để xóa trùng lặp dùng cách tập hợp, chúng ta có thể dùng mã sau:
new_menu = ['Hawaiian', 'Margherita', 'Mushroom', 'Prosciutto', 'Meat Feast', 'Hawaiian', 'Bacon', 'Black Olive Special', 'Sausage', 'Sausage'] final_new_menu = list(set(new_menu)) print(final_new_menu)
Dưới đây là danh sách sau khi xóa giá trị trùng lặp:
['Mushroom', 'Black Olive Special', 'Meat Feast', 'Bacon', 'Margherita', 'Sausage', 'Prosciutto', 'Hawaiian']
Ở đầu chương trình, chúng ta khai báo danh sách tên new_menu lưu tất cả pizza trên menu mới.
Sau đó, khai báo biến final_new_menu lưu menu đã sửa đổi. Biến này chuyển biến new_menu thành tập hợp dùng set(), rồi chuyển tập hợp ngược lại thành danh sách dùng list(). Quá trình này xóa tất cả giá trị trùng lặp trong biến new_menu.
Cuối cùng, chương trình in menu mới ra bảng điều khiển. Tất cả các phần tử duy nhất từ đối tượng danh sách gốc xuất hiện. Chúng ta giờ có danh sách duy nhất.
Kết luận
Xóa mục trùng lặp khỏi danh sách là thao tác phổ biến trong Python. Không có phương thức chính thức nào nên dùng để xóa trùng lặp khỏi danh sách. Các cách phổ biến nhất là dùng hàm từ điển fromkeys() hoặc chuyển dữ liệu thành tập hợp.
Trong hướng dẫn này, chúng ta đã thảo luận cách dùng hàm từ điển fromkeys() và tập hợp để xóa trùng lặp khỏi danh sách trong Python.
Để tìm hiểu thêm về lập trình Python, đọc hướng dẫn How to Learn Python của chúng tôi.