使用Python字典为networkx中节点设置属性

4

我正在尝试编写一个通用函数,该函数创建一个图形,该图形需要一个节点和边的列表。对于每个节点,都有一组默认属性和一组可选属性。由于可选属性可以是任何内容,因此我考虑使用字典来存储它们。但是,似乎add_node()不接受关键字变量。给定下面的代码片段:

import networkx as nx    

optional_attrs = {'ned':1, 'its':'abc'}

g = nx.Graph()
g.add_node('node1')
for k, v in optional_attrs.iteritems():
    g.add_node('node1', k=v)

print g.node(data=True)

我明白了

NodeDataView({'node1':{'k':'abc'}})

相比之下,

NodeDataView({'node1':{'ned':1, 'its':'abc'}})

我想知道是否有可能实现这个?


2
g.add_node('node1', attr_dict=optional_attrs) 应该可以完成任务。您应该阅读文档:https://networkx.github.io/documentation/stable/reference/generated/networkx.Graph.add_node.html?highlight=add_node#networkx.Graph.add_node - Simon Fromme
此外,参数名称会被直接使用。即使您有一个变量k,传递给add_node的参数名称仍将始终是字符串"k" - Simon Fromme
1
好的。看起来它创建了一个字典的字典。谢谢。 - twfx
这不起作用是因为attr_dict被计算为参数名。将attr_dict替换为blabla将完成完全相同的操作,只是参数名将变为blabla。 - Hedwin Bonnavaud
2个回答

7

通常在Python中,如果你想使用字典提供关键字参数给函数,你需要在字典前面加上**

g.add_node('node1', **optional_attrs)

您可以在添加节点后添加/更改节点属性:
g.add_node('node1')
g.nodes['node1'].update(optional_attrs)  

3
您还可以使用 set_node_attributes 函数,该函数接受一个图形和一个字典。字典的键集是图形节点的子集,其值是相应键的数据。
import networkx as nx    
optional_attrs = {'node1':{'ned':1, 'its':'abc'}}
g = nx.Graph()
g.add_node('node1')
nx.set_node_attributes(g, optional_attrs)
print(g.nodes.data())

这将输出:
[('node1', {'its': 'abc', 'ned': 1})]

在这里,您需要为每个节点创建可选属性,相当繁琐。 - abby37

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