为啥我的所有边在 networkx DiGraph 中都被分配了相同的值?

Posted

技术标签:

【中文标题】为啥我的所有边在 networkx DiGraph 中都被分配了相同的值?【英文标题】:Why are all my edges being assigned the same value in a networkx DiGraph?为什么我的所有边在 networkx DiGraph 中都被分配了相同的值? 【发布时间】:2021-06-06 17:19:16 【问题描述】:

我已经被这个简单的问题困住了一段时间,无法完全弄清楚解决方案。我有一个结构类似于 (node1, node2): weight 的字典,称为 EdgeDictFull。我想创建一个有向图,将权重作为属性存储在图中。我尝试了一大堆不同的想法,但似乎没有奏效。当我运行这段代码时......

(权重只是我想作为属性添加到边缘的所有权重的列表)

TG = nx.DiGraph()
for x in weights:
    TG.add_edges_from(EdgeDictFull.keys(), weight = x)

TG.edges(data = True)

这样做会创建所有正确的边,但所有边都将具有我的权重列表中最后一个整数的属性值。我想我明白为什么会这样,但是,我似乎无法弄清楚如何解决它。我知道这很简单。任何建议都会很棒!

【问题讨论】:

【参考方案1】:
# the problem with your code is that in every iteration of your loop you add
# *all* edges, and all of them get the same weight.

# you can do either of  the following:

# zip:
TG = nx.DiGraph()
for edge, weight in zip(EdgeDictFull.keys(), weights):
    TG.add_edge(*edge, weight=weight)
    
# or directly work with the dictionary:    
## dummy dictionary:
EdgeDictFull = (np.random.randint(5),np.random.randint(5)):np.random.rand() for i in range(3)

TG = nx.DiGraph()
TG.add_weighted_edges_from((a,b,c) for (a,b), c in EdgeDictFull.items())
    
    
TG.edges(data = True)

【讨论】:

以上是关于为啥我的所有边在 networkx DiGraph 中都被分配了相同的值?的主要内容,如果未能解决你的问题,请参考以下文章

使用networkX输出树形结构

networkx 笔记:pagerank

Networkx 图形 python

如何使用networkx在图中显示节点名称? [复制]

python学习(32)---networkx

networkx节点node样式style定制化,Python