我在使用python时遇到了困难,并发现了两个列表之间的差异
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
我希望获得发现差异的输出:
NL9:SB9
ABC:NL8:SB8
我试过了
cmdb_fin = set(cmdb)
db_fin = set(db)
equal = db_fin.symmetric_difference(cmdb_fin)
但输出类似于以下内容,因为它将精确的字符串相互比较,而不像“模式”
ABC:NL5:SB4
NL6:SB7
ABC:NL2:SB6
NL2:SB6
ABC:NL8:SB8
NL5:SB4
ABC:NL6:SB7
NL9:SB9
ABC:NL1:SB6
NL1:SB6
有什么方法可以得到我期望的输出吗
标准:
如果CMDB列表中的任何给定字符串(字符块)存在于DB列表中(它只能是字符串的一部分),则不应在输出中,因为它在两个列表中都存在。当然,还有另一种方式->;DB与CMD相比
例如,CMDB列表中的NL5:SB4
与DB中的ABC:NL5:SB4
匹配
为了在使用python集时定义自定义相等比较器,需要使用
__eq__
、__ne__
、&__hash__
已定义。下面是在您的案例中如何实现这一点的示例,使用每行中的最后两个元素来定义两个元素是否等效代码:
输出:
用法:
相关问题 更多 >
编程相关推荐