I've got a list of objects and I've got a db table full of records. My list of objects has a title attribute and I want to remove any objects with duplicate titles from the list (leaving the original).
Then I want to check if my list of objects has any duplicates of any records in the database and if so, remove those items from list before adding them to the database.
I have seen solutions for removing duplicates from a list like this:
myList = list(set(myList))
set(list_of_objects) will only remove the duplicates if you know what a duplicate is, that is, you'll need to define a uniqueness of an object.
In order to do that, you'll need to make the object hashable. You need to define both
__eq__ method, here is how:
Though, you'll probably only need to define
EDIT: How to implement the
You'll need to know, as I mentioned, the uniqueness definition of your object. Supposed we have a Book with attributes author_name and title that their combination is unique, (so, we can have many books Stephen King authored, and many books named The Shining, but only one book named The Shining by Stephen King), then the implementation is as follows:
def __eq__(self, other): return self.author_name==other.author_name\ and self.title==other.title
Similarly, this is how I sometimes implement the
def __hash__(self): return hash(('title', self.title, 'author_name', self.author_name))
You can check that if you create a list of 2 books with same author and title, the book objects will
be the same (with equal (with
is operator) and
== operator). Also, when
set() is used, it will remove one book.
EDIT: This is one old anwser of mine, but I only now notice that it has the error which is corrected with strikethrough in the last paragraph: objects with the same
hash() won't give
True when compared with
is. Hashability of object is used, however, if you intend to use them as elements of set, or as keys in dictionary.