быстрое удаление повторяющихся элементов в списке
Есть 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