遍历networkx中的节点属性

6
我使用networkx创建了一个图形,每个节点都有一些属性。所以我想搜索所有节点的特定属性,并将具有此属性的每个节点保存在列表中。我编写了以下代码,但出现错误:
for node in G.nodes():
    for attribute in G.node[node]['attributes']:
        if attribute in question:
            setOfUsers.append(node)

使用此代码时,我遇到了以下错误:
for attribute in G.node[node]['attributes']:
KeyError: 'attributes'

我在论坛上搜索并尝试了一些不同的方法来解决这个问题:

for node, data in G.nodes(data=True):
    if data['attributes'] == question[0]:
        setOfUsers.append(node)

但是我遇到了同样的错误。如何遍历属性?更新:我使用以下代码添加节点属性。我从文件中读取属性,然后将逗号和换行符拆分,最后将列表保存在节点中。
for line in file2:
    line = line.strip()
    words = line.split('\t')
    node = int(words[0])
    attributes= words[1]
    splittedAttributes = attributes.split(',')
    if node in G.nodes():
        G.node[node]['attributes'] = splittedAttributes

您没有将 skills 属性添加到图形中。 - Tai
1
你确定任何节点都有一个"属性"属性吗? 如果node in G.nodes()永远不为真,在行if node in G.nodes(): G.node[node]['attributes'] = splittedAttributes中,那么没有任何一个节点会被分配一个“属性”属性。 - unutbu
你能为我们打印 G.nodes(data=True) 吗? - Tai
@anutbu 是的,我认为这就是问题所在。我有一些节点它们没有属性。我该如何解决?在属性中添加一个空格是个好主意吗? - Lee Yaan
1个回答

7

你确定之前已经在节点中添加了这些信息吗?看起来像是networkX对你的“属性”一无所知。当我说添加信息时,我的意思是像这样:

for node in G.nodes():
    G.node[node]['attributes']= attributes[node]

然后您可以使用自己的代码来检查它们。
for node in G.nodes():
    for attribute in G.node[node]['attributes']:
        if attribute in question:
            setOfUsers.append(node) 

3
需要将代码中的 G.node[...][...] 替换为 G.nodes[...][...] 才能使其正常工作,否则代码运行良好。 - Wes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接