NetworkX如何将对象的属性作为节点访问

时间:2014-04-24 12:06:26

标签: python networkx

我创建了一个这样的示例图:

class myObject(object):
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return self.name

one = myObject("ONE")
Graph = nx.Graph()
Graph.add_node(one)

在这种情况下如何访问对象“one”的属性?我发现如果我将对象添加为节点的属性,我可以访问它,但访问

In [1]: Graph[one]
Out[1]: {}

或者例如

In [2]: print Graph[one]
{}

打印名称不起作用。

我也知道我可以迭代

返回的列表
Graph.nodes()

但我想知道是否有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:1)

您可以只检查您的对象'

In [1]: import networkx as nx

In [2]: %paste
class myObject(object):
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return self.name

one = myObject("ONE")
Graph = nx.Graph()
Graph.add_node(one)

## -- End pasted text --

In [3]: print(one)
ONE

您可以使用节点属性在NetworkX中存储节点的任意数据。这可能更简单。您甚至可以将自定义对象添加为属性。

In [4]: G = nx.Graph()

In [5]: G.add_node("ONE", color='red')

In [6]: G.node["ONE"] # dictionary of attributes
Out[6]: {'color': 'red'}

In [7]: G.add_node("ONE",custom_object=one)

In [8]: G.node["ONE"] # dictionary of attributes
Out[8]: {'color': 'red', 'custom_object': <__main__.myObject at 0x988270c>}