Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Loại bỏ các bản sao trong danh sách đối tượng bằng Python

set(list_of_objects) sẽ chỉ xóa các bản sao nếu bạn biết bản sao là gì, nghĩa là bạn sẽ cần xác định tính duy nhất của một đối tượng.

Để làm được điều đó, bạn sẽ cần phải làm cho đối tượng có thể băm được. Bạn cần xác định cả __hash____eq__ , đây là cách thực hiện:

http://docs.python.org/glossary.html#term-hashable

Tuy nhiên, bạn có thể chỉ cần xác định __eq__ phương pháp.

CHỈNH SỬA :Cách triển khai __eq__ phương pháp:

Bạn sẽ cần biết, như tôi đã đề cập, định nghĩa về tính duy nhất của đối tượng của bạn. Giả sử chúng tôi có một Sách với các thuộc tính author_name và tên sách mà sự kết hợp của chúng là duy nhất, (vì vậy, chúng tôi có thể có nhiều sách do Stephen King là tác giả và nhiều sách có tên The Shining, nhưng chỉ có một sách có tên The Shining của Stephen King), thì việc triển khai như sau:

def __eq__(self, other):
    return self.author_name==other.author_name\
           and self.title==other.title

Tương tự, đây là cách tôi đôi khi triển khai __hash__ phương pháp:

def __hash__(self):
    return hash(('title', self.title,
                 'author_name', self.author_name))

Bạn có thể kiểm tra xem nếu tạo danh sách 2 sách có cùng tác giả và tên sách, các đối tượng sách sẽ giống nhau (với is toán tử) và bằng nhau (với == nhà điều hành). Ngoài ra, khi set() được sử dụng, nó sẽ xóa một cuốn sách.

CHỈNH SỬA :Đây là một trình thử nghiệm cũ của tôi, nhưng bây giờ tôi mới nhận thấy rằng nó có lỗi được sửa bằng gạch ngang trong đoạn cuối:các đối tượng có cùng hash() sẽ không cung cấp True khi so sánh với is . Tuy nhiên, tính năng hashability của đối tượng được sử dụng nếu bạn định sử dụng chúng làm phần tử của tập hợp hoặc làm khóa trong từ điển.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao một cột văn bản không thể có giá trị mặc định trong MySQL?

  2. Cách dễ dàng nhanh chóng để di chuyển SQLite3 sang MySQL?

  3. đếm nhiều cột trong một truy vấn

  4. Kiểm tra giá trị trong một mảng bên trong một truy vấn SQL với mệnh đề WHERE

  5. Cập nhật Mã lỗi Trường Cơ sở dữ liệu Mã ghi nhận