Чтобы определить пользовательский компаратор равенства при использовании наборов python, необходимо определить пользовательский класс с определением __eq__
, __ne__
, & __hash__
. Ниже приведен пример того, как этого можно достичь в вашем случае, используя последние два элемента в каждой строке, чтобы определить, эквивалентны ли два элемента.
Код:
class Line(object):
def __init__(self, s):
self.s = s
self.key = ':'.join(s.split(':')[-2:])
def __repr__(self):
return self.s
def __eq__(self, other):
if isinstance(other, Line):
return ((self.key == other.key))
else:
return False
def __ne__(self, other):
return (not self.__eq__(other))
def __hash__(self):
return hash(self.key)
cmdb = ['ABC:NL1:SB6', 'ABC:NL2:SB6', 'ABC:NL3:SB6', 'ABC:NL4:SB6', 'NL9:SB9',
'NL5:SB4', 'NL6:SB7']
db = ['NL1:SB6', 'NL2:SB6', 'ABC:NL3:SB6', 'ABC:NL4:SB6', 'ABC:NL8:SB8',
'ABC:NL5:SB4', 'ABC:NL6:SB7']
cmdb_fin = set(Line(l) for l in cmdb)
db_fin = set(Line(l) for l in db)
equal = db_fin.symmetric_difference(cmdb_fin)
Выход:
>>> equal
{ABC:NL8:SB8, NL9:SB9}
Использование:
>>> Line('NL5:SB4') == Line('ABC:NL5:SB4')
True