Graph.update#

Graph.update(edges=None, nodes=None)[源代码]#

使用节点/边/图形作为输入更新图形。

与dict.update类似,此方法将图形作为输入,将图形的节点和边添加到此图形中。它还可以接受两个输入:边和节点。最后它可以是边或节点。只指定节点关键字 nodes 必须使用。

边缘和节点集合的处理方式与方法中的“添加边缘”和“添加节点”类似。迭代时,它们应该生成2个元组(u,v)或3个元组(u,v,datadict)。

参数
edgesGraph对象、边集合或无

第一个参数可以是图或一些边。如果它有属性 nodesedges ,则它被视为类似于图的对象,并且这些属性被用作要添加到图中的节点和边的集合。如果第一个参数不具有这些属性,它将被视为边的集合并添加到图中。如果第一个参数为None,则不添加任何边。

nodes节点集合,或无

除非第二个参数为None,否则它将被视为要添加到图中的节点集合。如果 edges is Nonenodes is None 将引发异常。如果第一个参数是图,则 nodes 被忽略。

参见

add_edges_from

向图形添加多条边

add_nodes_from

向图形中添加多个节点

笔记

如果你想使用邻接结构来更新图,那么直接从邻接关系中获取边/节点是很简单的。以下示例提供了常见情况,您的邻接关系可能略有不同,需要对这些示例进行调整:

>>> # dict-of-set/list/tuple
>>> adj = {1: {2, 3}, 2: {1, 3}, 3: {1, 2}}
>>> e = [(u, v) for u, nbrs in adj.items() for v in nbrs]
>>> G.update(edges=e, nodes=adj)
>>> DG = nx.DiGraph()
>>> # dict-of-dict-of-attribute
>>> adj = {1: {2: 1.3, 3: 0.7}, 2: {1: 1.4}, 3: {1: 0.7}}
>>> e = [
...     (u, v, {"weight": d})
...     for u, nbrs in adj.items()
...     for v, d in nbrs.items()
... ]
>>> DG.update(edges=e, nodes=adj)
>>> # dict-of-dict-of-dict
>>> adj = {1: {2: {"weight": 1.3}, 3: {"color": 0.7, "weight": 1.2}}}
>>> e = [
...     (u, v, {"weight": d})
...     for u, nbrs in adj.items()
...     for v, d in nbrs.items()
... ]
>>> DG.update(edges=e, nodes=adj)
>>> # predecessor adjacency (dict-of-set)
>>> pred = {1: {2, 3}, 2: {3}, 3: {3}}
>>> e = [(v, u) for u, nbrs in pred.items() for v in nbrs]
>>> # MultiGraph dict-of-dict-of-dict-of-attribute
>>> MDG = nx.MultiDiGraph()
>>> adj = {
...     1: {2: {0: {"weight": 1.3}, 1: {"weight": 1.2}}},
...     3: {2: {0: {"weight": 0.7}}},
... }
>>> e = [
...     (u, v, ekey, d)
...     for u, nbrs in adj.items()
...     for v, keydict in nbrs.items()
...     for ekey, d in keydict.items()
... ]
>>> MDG.update(edges=e)

实例

>>> G = nx.path_graph(5)
>>> G.update(nx.complete_graph(range(4, 10)))
>>> from itertools import combinations
>>> edges = (
...     (u, v, {"power": u * v})
...     for u, v in combinations(range(10, 20), 2)
...     if u * v < 225
... )
>>> nodes = [1000]  # for singleton, use a container
>>> G.update(edges, nodes)