2013-10-16 1 views
0

networkx의 1.6.1에서 사용했던 코드를 일부 풀어 냈습니다. 1.8.1에서는 gml 또는 graphml에 쓸 때 작동하지 않습니다. 내가 사용하는 경우네트워크 x 가장자리가 속성을 올바르게 추가하지 않음

AttributeError: 'str' object has no attribute 'items' 

:

문제는 가장자리과 같이 데이터 딕셔너리 내부 속성을 쓸 수 없습니다 것으로 귀결 :

BasicGraph = nx.read_graphml("KeggCompleteEng.graphml") 

for e,v in BasicGraph.edges_iter(): 
    BasicGraph[e][v]['test'] = 'test' 

nx.write_graphml(BasicGraph, "edgeTester.graphml") 

는 오류를 발생 for e,v,data in BasicGraph.edges_iter(data=True): 데이터 인쇄를 같이 그래서 :

{'root_index': -3233, 'label': u'unspecified'} 
test 

일명 새로운 속성은 사전 밖에 있습니다.

설명서에 위와 같이 할 수 있다고 나와 있습니다. 그러나, 나는 어리석은 실수를 범하고 올바른 길로 되돌아가는 것을 감사 할 것입니다!

편집 :

그래서 내가 프로그램 내부에서 발생하는 그래프와 함께 프로그램을 실행 : BasicGraph = nx.complete_graph(100)을하고 잘 달렸다.

그런 다음 프라이머 : BasicGraph = nx.read_graphml("graphmltest.graphml")의 예제 그래프 파일을 사용하여 실행했습니다. (심지어 Cytoscape를 가져오고 나가서 문제가 아닌지 확인했습니다.)

분명히 내가 사용하고있는 파일입니다. Here's 링크를 통해 누구와 함께 문제를 볼 수 있습니까?

+0

해당 파일을로드 할 필요가 없습니다하도록 코드를 수정할 수를 사용하는 것이 안전하다? – tacaswell

+0

'nx.complete_graph()'와 다른 graphml 파일로 시도해 보았는데, 모두 잘 동작했습니다. 업데이트보기! – Darkstarone

답변

3

문제는 그래프 NetworkX는 다중 그래프 오브젝트로서로드되도록 평행 가장자리가 있다는 것이다 :

때문에 에지 그래프 오브젝트 저장소의 내부 구조는 G [노드]인지의
In [1]: import networkx as nx 

In [2]: G = nx.read_graphml('KeggCompleteEng.graphml') 

In [3]: type(G) 
Out[3]: networkx.classes.multigraph.MultiGraph 

In [4]: G.number_of_edges() 
Out[4]: 7123 

In [5]: H = nx.Graph(G) # convert to graph, remove parallel edges 

In [6]: H.number_of_edges() 
Out[6]: 6160 

[노드] [키] [속성] = 값 (멀티 그래픽을위한 여분의 키 사전 수준에 유의하십시오).

당신은 명시 적으로 나누기

for e,v in BasicGraph.edges_iter(): 
    BasicGraph[e][v]['test'] = 'test' 

하여 구조를 수정하고 있습니다.

그런 식으로 데이터 구조를 수정할 수있다하지만 NetworkX의 API

In [7]: G = nx.MultiGraph() 

In [8]: G.add_edge(1,2,key='one') 

In [9]: G.add_edge(1,2,key='two') 

In [10]: G.edges(keys=True) 
Out[10]: [(1, 2, 'two'), (1, 2, 'one')] 

In [11]: G.add_edge(1,2,key='one',color='red') 

In [12]: G.add_edge(1,2,key='two',color='blue') 

In [13]: G.edges(keys=True,data=True) 
Out[13]: [(1, 2, 'two', {'color': 'blue'}), (1, 2, 'one', {'color': 'red'})] 
관련 문제