次の形式のデータがあります。
id1 id2 値のようなもの
1 234 0.2
1 235 0.1
等々。json形式に変換したい:
{
"nodes": [ {"name":"1"}, #first element
{"name":"234"}, #second element
{"name":"235"} #third element
] ,
"links":[{"source":1,"target":2,"value":0.2},
{"source":1,"target":3,"value":0.1}
]
}
したがって、元のデータから上記の形式へ.. ノードには、元のデータに存在する (個別の) 名前のすべてのセットが含まれ、リンクは基本的に、ノードによって返される値リスト内のソースとターゲットの行番号です。例えば:
1 234 0.2
1 は、キー「nodes」が保持する値のリストの最初の要素にあります 234 は、キー「nodes」が保持する値のリストの 2 番目の要素です
したがって、リンク ディクショナリは {"source":1,"target":2,"value":0.2} です。
Pythonでこれを効率的に行うにはどうすればよいですか..私がやっていることよりも良い方法があるはずです。
def open_file(filename,output=None):
f = open(filename,"r")
offset = 3429
data_dict = {}
node_list = []
node_dict = {}
link_list = []
num_lines = 0
line_ids = []
for line in f:
line = line.strip()
tokens = line.split()
mod_wid = int(tokens[1]) + offset
if not node_dict.has_key(tokens[0]):
d = {"name": tokens[0],"group":1}
node_list.append(d)
node_dict[tokens[0]] = True
line_ids.append(tokens[0])
if not node_dict.has_key(mod_wid):
d = {"name": str(mod_wid),"group":1}
node_list.append(d)
node_dict[mod_wid] = True
line_ids.append(mod_wid)
link_d = {"source": line_ids.index(tokens[0]),"target":line_ids.index(mod_wid),"value":tokens[2]}
link_list.append(link_d)
if num_lines > 10000:
break
num_lines +=1
data_dict = {"nodes":node_list, "links":link_list}
print "{\n"
for k,v in data_dict.items():
print '"'+k +'"' +":\n [ \n "
for each_v in v:
print each_v ,","
print "\n],"
print "}"
open_file("lda_input.tsv")