В графе доступ к соединениям узлов по имени ребра - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть граф базы знаний (встроенный 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') 

graph relations

Между каждой парой узлов есть определенное отношение c, например, «работает в», «из» и т.д. c

Я хочу проверить, есть ли у меня нужное ребро для указанного c узла. Например, знаю ли я информацию о том, где user1 работает на .

В настоящее время я делаю это в al oop:

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

Можно ли проверить если узел имеет указанный c край без l oop?

и, следовательно, получить связанный узел по этому краю?

1 Ответ

1 голос
/ 21 апреля 2020

Нет, вам придется перебирать края узла, чтобы посмотреть, соответствует ли какой-либо из них критериям поиска. Единственное улучшение незначительное , о котором я могу подумать, - это поиск только среди внешних узлов с 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
...