Python NetworkX MultiDiGraph:向现有节点添加新属性

Python NetworkX MultiDiGraph:向现有节点添加新属性,python,networkx,Python,Networkx,因此,我在尝试MultiDiGraph时遇到了这种情况,我希望得到一些指导: G = nx.MultiDiGraph() setA= ['a','b','c','d','e','f'] G.add_nodes_from(setA,entity='typeA') setB = ['a','x','y','z'] G.add_nodes_from(setB,entity='typeB') print([node[0] for node in G.nodes(data='entity') if no

因此,我在尝试MultiDiGraph时遇到了这种情况,我希望得到一些指导:

G = nx.MultiDiGraph()
setA= ['a','b','c','d','e','f']
G.add_nodes_from(setA,entity='typeA')

setB = ['a','x','y','z']
G.add_nodes_from(setB,entity='typeB')
print([node[0] for node in G.nodes(data='entity') if node[1]=='typeA'])
显然,这会导致覆盖节点“a”的“entity”属性并打印“['b'、'c'、'd'、'e'、'f']”

因为我怀疑这是故意的 就NetworkX而言,对于我试图实现的目标,是否有任何可行的解决方法

非常感谢~

我同意@。热编码是一种普遍可行的方法。此外,数据是与属性dict绑定的节点(或边元组),也就是说,任何python dict格式都有意义!e、 g:

G = nx.MultiDiGraph()
setA = ['a','b','c','d','e','f']
G.add_nodes_from(setA, entity={"typeA":True, "typeB":False})

# or
entityA = {"typeA":True, "typeB":False}
G.add_nodes_from(setA, entity=entityA)

attr = {"entity": entityA}  # or simply assign entityA to attr.
G.add_nodes_from(setA, **attr)

G.add_nodes_from(setA, entity=[True, False], entity_label=["typeA", "typeB"])
G.add_nodes_from(setA, entity=list(entityA.values()), entity_label=list(entityA.keys()))
……
然后问题仍然是如何获得每个节点类型的值。(设置每种类型的二进制权重,计算双向异或可能是一个不错的选择。)
PS:可以以相同的方式添加边属性。属性模式将扩展为实体类型图的一个相邻矩阵。

我想一种方法是:G.add_nodes_from(setA,typeA=True)G.add_nodes_from(setB,typeB=True)print([node[0]表示G.nodes中的node(data='typeA'),如果node[1]]),但还有更漂亮的吗?