python dict用唯一键覆盖其他值

时间:2017-06-16 22:39:59

标签: python dictionary overwrite

我正在创建一个图形模型来存储来自nmap扫描的扫描。有一个GraphModel,Vertex和Edge类,NmapDataModel类充当GraphModel的包装器。当我向其中摄取多个IP地址时,它会获取最新的IP和顶点属性并覆盖这些属性,但保留正确的键值(这是使顶点唯一的值的哈希值)。任何帮助将不胜感激...拉我的头发... 主程序。第52行的print语句显示了这个问题。

编辑:我遇到的问题是每个键都是唯一的,但共享图模型中的所有值都使用NmapDataModel.add_ipv4()函数写入的最后一个值。密钥是唯一的,它们是通过获取标签和ipv4地址创建的哈希。


    class NmapDataModel(object):
        def __init__(self):
            self.graphmodel = graph.GraphModel()

        def add_ipv4(self, ipAddress, properties={}):
            properties['ipv4'] = ipAddress
            v = graph.Vertex('IP', properties=properties, unique_by=['ipv4'])
            return self.graphmodel.add_vertex(v)

    class NmapInterface(object):
        def build_model(self, filename=None):
            dm = NmapDataModel()
            tree = ET.parse(filename)
            root = tree.getroot()
            for host in root.findall('host'):
                ipAddressFromHostStuff = some process that gets the IP there
                dm.add_ipv4(ipAddressFromHostStuff)
                for item in dm.graphmodel.vertices:
                    print(item, dm.graphmodel.vertices[item])
            return dm.graphmodel

    class GraphModel(object):
        def __init__(self, graphDict=None):
            self.vertices = dict()
            self.edges = dict()

        def add_vertex(self, vertex):
            if(not vertex.id in self.vertices):
                self.vertices.update({vertex.id:vertex})
            else:
                self.vertices[vertex.id].properties.update(vertex.properties)
            return self.vertices[vertex.id]

    class Vertex(object):
        def __init__(self, label, properties={}, unique_by=[]):
            self.label = label
            id = label
            if(unique_by):
                for item in unique_by:
                    id += ':' + str(properties.get(item,'None'))
            else:
                for item in properties.keys():
                    id += ':' + str(properties.get(item,'None'))
            id = hashlib.md5(id.encode('utf-8')).hexdigest()[0:10]
            properties['hashcode'] = id
            self.id = id
            self.properties = properties

示例输出


    ============
    192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.5', 'hashcode': '192c6e67b6'}
    ============
    192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.7', 'hashcode': '9a4b1c6c9f'}
    9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.7', 'hashcode': '9a4b1c6c9f'}
    ============
    192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.8', 'hashcode': 'fdb4251f16'}
    9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.8', 'hashcode': 'fdb4251f16'}
    fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.8', 'hashcode': 'fdb4251f16'}
    ============
    192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.10', 'hashcode': '6c5d6cc9ec'}
    9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.10', 'hashcode': '6c5d6cc9ec'}
    fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.10', 'hashcode': '6c5d6cc9ec'}
    6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.10', 'hashcode': '6c5d6cc9ec'}
    ============
    192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.13', 'hashcode': '12284ae326'}
    9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.13', 'hashcode': '12284ae326'}
    fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.13', 'hashcode': '12284ae326'}
    6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.13', 'hashcode': '12284ae326'}
    12284ae326 IP:12284ae326:{'ipv4': '10.11.1.13', 'hashcode': '12284ae326'}
    ============
    192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.14', 'hashcode': 'b8e17aacb6'}
    9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.14', 'hashcode': 'b8e17aacb6'}
    fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.14', 'hashcode': 'b8e17aacb6'}
    6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.14', 'hashcode': 'b8e17aacb6'}
    12284ae326 IP:12284ae326:{'ipv4': '10.11.1.14', 'hashcode': 'b8e17aacb6'}
    b8e17aacb6 IP:b8e17aacb6:{'ipv4': '10.11.1.14', 'hashcode': 'b8e17aacb6'}
    ============
    192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
    9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
    fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
    6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
    12284ae326 IP:12284ae326:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
    b8e17aacb6 IP:b8e17aacb6:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
    8ec5f874b7 IP:8ec5f874b7:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
    ============
    192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
    9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
    fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
    6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
    12284ae326 IP:12284ae326:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
    b8e17aacb6 IP:b8e17aacb6:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
    8ec5f874b7 IP:8ec5f874b7:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
    635dcc2038 IP:635dcc2038:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
    ============
    192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
    9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
    fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
    6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
    12284ae326 IP:12284ae326:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
    b8e17aacb6 IP:b8e17aacb6:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
    8ec5f874b7 IP:8ec5f874b7:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
    635dcc2038 IP:635dcc2038:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
    c7daaefc8d IP:c7daaefc8d:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
    ============
    192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
    9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
    fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
    6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
    12284ae326 IP:12284ae326:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
    b8e17aacb6 IP:b8e17aacb6:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
    8ec5f874b7 IP:8ec5f874b7:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
    635dcc2038 IP:635dcc2038:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
    c7daaefc8d IP:c7daaefc8d:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
    53273bad7d IP:53273bad7d:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
    ============
    192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
    9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
    fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
    6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
    12284ae326 IP:12284ae326:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
    b8e17aacb6 IP:b8e17aacb6:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
    8ec5f874b7 IP:8ec5f874b7:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
    635dcc2038 IP:635dcc2038:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
    c7daaefc8d IP:c7daaefc8d:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
    53273bad7d IP:53273bad7d:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
    021890997d IP:021890997d:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}

0 个答案:

没有答案