首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python,输出两个与*通配符不同的列表

Python,输出两个与*通配符不同的列表
EN

Stack Overflow用户
提问于 2020-01-23 07:53:11
回答 1查看 73关注 0票数 0

我很难处理python并发现两个列表之间的差异。

列表:

代码语言:javascript
复制
ABC:NL1:SB6
ABC:NL2:SB6
ABC:NL3:SB6
ABC:NL4:SB6
NL9:SB9
NL5:SB4
NL6:SB7

DB列表:

代码语言:javascript
复制
NL1:SB6
NL2:SB6
ABC:NL3:SB6
ABC:NL4:SB6
ABC:NL8:SB8
ABC:NL5:SB4
ABC:NL6:SB7

我想得到发现不同之处的输出:

代码语言:javascript
复制
NL9:SB9
ABC:NL8:SB8

我试过了

代码语言:javascript
复制
cmdb_fin = set(cmdb)
db_fin = set(db)
equal = db_fin.symmetric_difference(cmdb_fin)

但是输出类似于下面的内容,因为它比较精确的字符串,而不是“模式”。

代码语言:javascript
复制
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匹配。

EN

回答 1

Stack Overflow用户

发布于 2020-01-23 10:48:13

为了在使用python集时定义自定义相等比较器,您需要定义一个具有__eq____ne____hash__定义的自定义类。下面是一个例子,说明如何在您的情况下实现这一点,使用每一行中的最后两个元素来定义两个元素是否等效。

代码:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
>>> equal
{ABC:NL8:SB8, NL9:SB9}

使用:

代码语言:javascript
复制
>>> Line('NL5:SB4') == Line('ABC:NL5:SB4')
True
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59873780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档