python中的图形从边缘列表

时间:2014-12-04 13:22:50

标签: python dictionary

我在文本文件中有一个边列表:

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&#34 ;:[" d"]," d":[" c"]}

提前谢谢

1 个答案:

答案 0 :(得分:2)

如果您需要双向图表,则需要两个附加内容。

此外,您并非真正需要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,在这种情况下,您不需要使用d初始化np.unique。它还可以防止当节点仅出现在第二列时会发生的错误。

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)