быстрое удаление повторяющихся элементов в списке

Есть 2 списка (около 100000) элементов. Оба списка содержат элементы типа FirewallAddress

class FirewallAddress:
    def __init__(self, db_id, router_id, address, source_list_name, new_list_name, date):
        self.id = db_id
        self.router_id = router_id
        self.address = address
        self.source_list_name = source_list_name
        self.new_list_name = new_list_name
        self.date = date

как быстро найти уникальные элементы в списках по полю address?

p.s. set, но по полю класса

UPD: надо сделать функцию в которую подается 2 списка, надо вернуть элементы из первого списка которых нет во втором


Ответы (2 шт):

Автор решения: Stanislav Volodarskiy

Соберите адрес в словарь. Из словаря извлеките значения. Теперь они уникальные.

d = {}
for a in addresses:
    d[a.address] = a
unique = list(d.values())

Комментарий от andreymal в одну строку:

unique = list({a.address: a for a in addresses}.values())
→ Ссылка
Автор решения: Xrou

ответ Stanislav Volodarskiy напомнил что в словарях поиск выполняется быстрее чем в листах. Вот решение:

def unique_addresses(from_addresses, in_addresses):
addresses = dict()
unique = []

for addr in in_addresses:
    addresses[addr.address] = addr

for addr in from_addresses:
    if addr.address not in addresses:
        unique.append(addr)

return unique
→ Ссылка