Well, I know it's quite ugly what I did to the code, but any improvements are welcome. Actually, it doesn't work as it should yet. The items should stay the same as at the beginning. I say in one sentence what I want to achieve: Synchronized items with dblist. It should remove hosts from items which are not dblist or it should add a new host from dblist which is not in items. I'm sorry I'm not very skilled programmer.
What O notations(algorithm complexity) I introduced to it? I know made it much slower this way. dblist = [{'id':1, 'host':'google.com','ip_address':'1.2.3.4'}, {'id':3, 'host':'msn.com','ip_address':'11.3.2.3'}, {'id':9, 'host':'yahoo.com','ip_address':'5.6.7.8'}] class Item(object): def __init__(self, id, host, **discarded): self._tuple = (id, host) def __hash__(self): return hash(self._tuple) def __eq__(self, other): return self._tuple == other._tuple def __repr__(self): return "Item(id=%r, host=%r)" % self._tuple def syncMemAndDBlist_1(): for d in dblist: item = Item(**d) if item not in items: print "adding", item items.add(item) else: print item, "already there" def syncMemAndDBlist_2(a): while a > 0: for i in items: if i not in dblistitems: items.remove(i) break a -= 1 if len(items) == 0: syncMemAndDBlist_1() items = set([Item(1, "google.com"), Item(3, "yahoo.com"), Item(9, "msn.com")]) dblistitems = set() for d in dblist: dblistitems.add(Item(**d)) a = len(items) b = len(dblistitems) if a < b: syncMemAndDBlist_1() else: syncMemAndDBlist_2(a) print 'final items are' ,items -- http://mail.python.org/mailman/listinfo/python-list