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

NetworkX MultiDiGraph : Adding new attribute to existing node

所以我在尝试 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 的一部分,对于我想要实现的目标,是否有任何可行的解决方法?

非常感谢~

我同意@Νίκος Γιαλίτσης. One-Hot Encoding is a general feasible way. Moreover, a networkx.MlutiDiGraph 数据是一个节点(或边缘元组)与属性字典绑定,也就是说,任何python 字典格式都有意义!例如:

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: 边缘属性可以用同样的方法添加。属性的模式将扩展为实体类型图的相邻矩阵。