我如何使用python字典来保存图形边缘权重

时间:2015-10-06 06:16:54

标签: python python-2.7 dictionary

我想保存图形边缘权重 我的输入是这样的

[['A', 'B', '5']]

这意味着我们从'A'到'B'的边缘重量为5

我的代码是

def inputFormatter(array):

    Nodes={}

    for p in array:

        a=p[0]
        b=p[1]
        value=p[2]

        if(a not in Nodes):
            Nodes[a]=NodeInfo(a)

        if(b not in Nodes[a].neighbors):
            Nodes[a].neighbors[b]=value


        if(b not in Nodes):
            Nodes[b]=NodeInfo(b)

        if(a not in Nodes[b].neighbors):
            Nodes[b].neighbors[a]=value

    return Nodes

我的NodeInfo类是

class NodeInfo:

    neighbors={}
    nodeName=""

    def __init__(self, nodeName):
        self.nodeName=nodeName

但在使用此代码打印邻居密钥

for node in Nodes:
    print node.nodeName +"\t"+ str(node.neighbors.keys())

我看到了这个

A   ['A', 'B']
B   ['A', 'B']

为什么呢? 怎么了? 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您的neighbors是一个类变量,因此它们在实例之间共享。你应该试试:

class NodeInfo:
    def init(self, nodeName):
        self.nodeName = nodeName
        self.neighbors = {}

请注意,当您执行nodeName时,您将使用实例成员覆盖类成员self.nodeName = nodeName(这就是为什么您没有看到他们共享它的原因)。