理想情况下,我想让networkx生成类似于下面的graphML,即在数据标记内部使用属性。这是因为dta标记中的值和属性goldKey具有一对一的对应关系:
<node id="1">
<data key="d0">-10</data>
<data key="d5" goldKey=5394 >viSram</data>
</node>
<node id="2">
<data key="d5" globKey=2036 >BAvay</data>
<data key="d0" >-23</data>
</node>
我知道这在graphML中有效。但是在networkx中我们如何实现这一目标呢?
我们有一个networkx
图形对象,其中节点需要存储多个属性。但是其中两个属性具有一对一的对应关系,即映射看起来像这样
1151:'yogin'
2036:'BAvay'
5934:'viSram'
使用networkx时,我可以将它们存储为单独的属性,而不会将对应关系反映在graphML文件中,如下所示:
k.add_node(1, {5392:'viSram'}, cng=108)
networkx默认write_graphml
方法提供的相应的graphML看起来像这样
<key attr.name="lemma" attr.type="string" for="node" id="d2" />
<key attr.name="globKey" attr.type="int" for="node" id="d1" />
<key attr.name="cng" attr.type="int" for="node" id="d0" />
<node id="1">
<data key="d0">108</data>
<data key="d1">5394</data>
<data key="d2">viSram</data>
</node>
如果我将相同的字典存储在networkx中,则会反映出来。但是转到不必要的映射,如下所示:
<key attr.name="1151" attr.type="string" for="node" id="d3" />
<key attr.name="2036" attr.type="string" for="node" id="d2" />
<key attr.name="5934" attr.type="string" for="node" id="d1" />
<key attr.name="cng" attr.type="string" for="node" id="d0" />
<node id="1">
<data key="d0">-10</data>
<data key="d1">viSram</data>
</node>
<node id="2">
<data key="d2">BAvay</data>
<data key="d0" >-23</data>
</node>
<node id="3">
<data key="d0">29</data>
<data key="d3" >yogin</data>
</node>
<node id="4">
<data key="d2">as</data>
<data key="d0">-23</data>
</node>