如何读取txt文件并使用邻接列表python创建字典

时间:2017-04-18 13:41:23

标签: python dictionary graph adjacency-list

我试图通过读取这种格式的.txt文件在python中创建一个邻接列表字典:

1 2
1 3
1 10
2 3
4 5
4 6
4 10
5 6
7 8
7 9
7 10
8 9

我希望生成的字典具有以下格式:

adjacency_list_dict = {[1]:{[2,3,10],[2]:[1,3] ....}等

注意尽管看起来像有向图,但它实际上是无向的,并且字典中每个键的列表值必须包含所有相邻节点,例如[10]:[1,4,7]尽管10不是位于任何txt文件行的第一列。

现在我被这个代码块困住了:

# Main file for assignment 2
input_filename = "example_graph_1.txt"
def create_teams():
    return []
def create_lex():
    return {}
def make_to_list(node):
    return [node]

teams = create_teams()
adjacency_graph = create_lex()

with open(input_filename) as graph_input:
    for line in graph_input:
        nodes = [int(x) for x in line.split()]
        for i in nodes:
            if make_to_list(i) not in teams:
                teams.append(make_to_list(i))
            if i not in adjacency_graph:
                adjacency_graph[i] = create_teams()
    print adjacency_graph
    print teams

请忽略所有其他变量,字典adjacency_graph是我所关注的。 :)

我该怎么办?

2 个答案:

答案 0 :(得分:3)

您可以使用'并拆分来完成此操作。基本上,代码将在键.setdefault创建一个新列表,如果它没有定义。之后,我们附加到列表中。

parts[0]

使其双向化的最简单方法是以两种方式附加字典:

di = {}

with open("file.txt", "r") as fi:
    for line in fi:
        parts = line.split()
        di.setdefault(parts[0],[]).append(parts[1])

print(di)

答案 1 :(得分:1)

import numpy

l1, l2  = numpy.genfromtxt('t.txt', dtype='float').T 
uniques = list(numpy.unique(l1))+list(numpy.unique(l2))    
dic = {}

for i in numpy.unique(uniques):
    a =list(l2[numpy.where(l1 == i)[0]])
    b =list(l1[numpy.where(l2 == i)[0]])

    c = list(numpy.unique(a+b))
    dic[i] = c

输出: {1.0:[2.0,3.0,10.0],2.0:[1.0,3.0],3.0:[1.0,2.0],4.0:[5.0,6.0,10.0],5.0:[4.0,6.0],6.0:[4.0, 5.0],7.0:[8.0,9.0,10.0],8.0:[7.0,9.0],9.0:[7.0,8.0],10.0:[1.0,4.0,7.0]}