通过networkx中的属性之间的映射来编写graphML节点

时间:2016-08-18 12:50:06

标签: networkx graphml

理想情况下,我想让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>

0 个答案:

没有答案