首页 > 解决方案 > 使用 Python 在 NetworkX 中示例边缘属性

问题描述

我想从我用 networkX 构建的有向图中采样三个边缘属性。图表中具有“依赖”属性的边如下所示:

import networkx as nx
import random
from random import choice
G=nx.DiGraph()
G.add_edge('x','a', dependency=0.4)
G.add_edge('x','b', dependency=0.6)
G.add_edge('a','c', dependency=1)
G.add_edge('b','c', dependency=0.3)
G.add_edge('b','d', dependency=0.7)
G.add_edge('d','e', dependency=1)
G.add_edge('c','y', dependency=1)
G.add_edge('e','y', dependency=1)

现在我想从上面采样三个不同的边缘属性,并将它们与 0 到 1 之间的随机数相乘。它应该看起来像这样:

for i in range(3):
    sampled_edge = random.sample(G.edges, 1)
    sampled_edge_with_random_number = sampled_edge['dependency'] * random.uniform(0,1)
    print(sampled_edge_with_random_number)

但我不断收到以下错误消息:

TypeError: list indices must be integers or slices, not str

做这个的最好方式是什么?

标签: pythongraphnetworkx

解决方案


你的剧本有两个错误。

  1. 是什么random.sample(G.edges, 1)?绝对是包含一个项目的列表,因此它不能成为任何优势的关键。正确的键是sampled_edge[0]
  2. 是什么sampled_edge?如果是列表或元组,则不能有任何键。唯一应该有一个键的是你的图表的 EdgeView。那时应该是G.edges

识别出某些边缘后,您也可以访问其属性。所以只需在你的脚本中替换你的,就是这样sampled_edge['dependency']G.edges[sampled_edge[0]]['dependency']


推荐阅读