MultiGraph.update#

MultiGraph.update(edges=None, nodes=None)#

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

类似于 dict.update,此方法接受一个图作为输入,将该图的节点和边添加到当前图中。它也可以接受两个输入:边和节点。最后,它可以只接受边或只接受节点。若要仅指定节点,必须使用关键字 nodes

边和节点的集合的处理方式类似于 add_edges_from/add_nodes_from 方法。当迭代时,它们应该产生 2 元组 (u, v) 或 3 元组 (u, v, datadict)。

参数
edgesGraph 对象、边集合或 None

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

nodes节点集合或 None

第二个参数被视为要添加到图中的节点集合,除非它是 None。如果 edges is Nonenodes is None,则会引发异常。如果第一个参数是 Graph,则忽略 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)