2013-06-21 5 views
4

У меня есть график, построенный с использованием пакета networkx в Python, который имеет атрибуты данных, связанные как с узлами, так и с краями. Эти атрибуты представляют собой словари (или списки) сами с вложенными словарями. Я не могу понять, как написать этот график в формате .gexf (или .graphml и т. Д.) Из-за типа данных.Использование nx.write_gexf в Python для графиков с данными dict на узлах и ребрах

Есть ли способ получить write_gexf для анализа этих типов данных в XML? или есть ли другой способ обхода?

Вот пример:

1 import networkx as nx 
2 
3 G = nx.graph() 
4 G.add_node(0, attr1 = { 'name1' : 'Alice', 'name2' : 'Bob' }, attr2 = 5) 
5 G.add_node(0, attr1 = { 'name1' : 'Calvin', 'name2' : 'Hobbes' }, attr2 = 6) 
6 G.add_edge(0,1, likes = ['milk', 'oj']) 
7 
8 nx.write_gefx(G,"test.gefx") 

который выдает ошибку:

Traceback (most recent call last): 
File "so_write_gefx.py", line 8, in <module> 
nx.write_gexf(G,"test.gexf") 
... 
line 378, in add_attributes 
for val,start,end in v: 
ValueError: too many values to unpack 

ответ

3

Формат GEXF только определяет набор, если достаточно простых типов данных. В вашем примере вы устанавливаете край атрибут данных «любит», чтобы быть список

G.add_edge(0,1, likes = ['milk', 'oj']) 

, который не обрабатывается писателем GEXF.

Если вы придерживаетесь строк, цифр и т. Д., То вы не столкнетесь с этой проблемой.

+0

Очень жаль, что эти графические XML-форматы не могут обрабатывать глубокие типы данных. – Rob

+0

Я думаю, в принципе они могут. Его нужно будет определить как расширение стандарта. – Aric