在图中,通过边名称访问节点连接

In graph, access node connections by edge name

我有一个知识库图(内置于networkx)。

这里是虚构的例子。

G = nx.DiGraph()
G.add_edge('user1', 'New York', relation = 'works at')
G.add_edge('user1', 'Boston', relation = 'from')
G.add_edge('user1', '27', relation = 'Age') 

在每对节点之间我有特定的关系,例如'works at','from',等等

我想检查我是否有特定节点所需的边缘。例如,我是否知道 user1 在 .

的工作地点的信息?

目前,我循环执行:

for connected_node, attributes in G['user1'].items():
    if attributes['relation'] == 'works at':
        print(True, connected_node)

是否可以在没有循环的情况下检查节点是否具有特定边?

然后通过这条边得到连接的节点?[​​=14=]

不,您必须遍历节点的边缘以查看它们是否与搜索条件匹配。我能想到的唯一 minor 改进是仅在具有 DiGraph.out_edges:

的节点的外边缘中搜索
for source, dest, d in G.out_edges('user1', data=True):
    if d.get('relation') == 'works at':
        print(f'Connected node {source} -> {dest}')
# Connected node user1 -> New York