![](/img/trans.png)
[英]Loading data from a list of lists (representing edges) into an igraph graph in python
[英]graph in python from a list of edges
我在文本文件中有一個邊列表:
0 1
0 2
0 3
1 637
1 754
1 1319
1 1350
1 1463
1 1523
2 637
2 754
2 1319
2 1350
2 1463
2 1523
3 499
3 539
3 595
3 637
3 706
3 1128
3 1194
3 1213
3 1319
.. ...
我需要將其變成這樣的字典:
graph = { "a" : ["c"],
"b" : ["c", "e"],
"c" : ["a", "b", "d", "e"],
"d" : ["c"],
"e" : ["c", "b"],
"f" : []
}
到目前為止,我的嘗試是:
import numpy as np
file_name='/Volumes/City_University/data_mining/Ecoli.txt'
key_column=0
dat=np.genfromtxt(file_name,dtype=str)
d={i:[] for i in np.unique(dat[:,key_column])}
for row in dat:
for key in d.keys():
if row[key_column]==key :d[key].append(row[1])
print (d)
但是,這不能正常工作,因為當出現在值中時,我沒有得到新的鍵:例如,我得到:
'0': ["1", "2", "3"]
'1': ['637', '754', '1319', '1350', '1463', '1523']
在“ 1”中,缺少“ 0”。
使它更簡單。 如果我有這樣的文字
a b
c d
我應該得到如下結果:graph = {“ a”:[“ b”],“ b”:[“ a”],“ c”:[“ d”],“ d”:[“ c”]}
先感謝您
如果需要雙向圖,則需要兩個追加。
另外,您實際上並不需要for key in d.keys()
循環中的for key in d.keys()
,只需追加到d[row[0]]
而不是d[key]
。
for row in dat:
d[row[0]].append(row[1])
d[row[1]].append(row[0])
另外,考慮使用defaultdict,在這種情況下,您無需使用np.unique
初始化d
。 它還將防止當節點僅出現在第二列中時可能發生的錯誤。
import numpy as np
from collections import defaultdict
file_name='/Volumes/City_University/data_mining/Ecoli.txt'
dat=np.genfromtxt(file_name,dtype=str)
d=defaultdict(list)
for row in dat:
d[row[0]].append(row[1])
d[row[1]].append(row[0])
print (d)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.