MultiDiGraph.update#

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

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

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

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

Parameters:
edges图对象、边的集合或 None

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

nodes节点的集合或 None

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

See also

add_edges_from

向图中添加多条边

add_nodes_from

向图中添加多个节点

Notes

如果你想使用邻接结构更新图,可以直接从邻接结构中获取边/节点。以下示例提供了常见情况,你的邻接结构可能略有不同,需要调整这些示例:

>>> # 集合/列表/元组的字典
>>> 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()
>>> # 属性的字典的字典
>>> 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)
>>> # 字典的字典的字典
>>> 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)
>>> # 前驱邻接(集合的字典)
>>> pred = {1: {2, 3}, 2: {3}, 3: {3}}
>>> e = [(v, u) for u, nbrs in pred.items() for v in nbrs]
>>> # 多图的字典的字典的字典的字典
>>> 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)

Examples

>>> 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]  # 对于单例,使用容器
>>> G.update(edges, nodes)