2017-04-18 2 views
0

:나는이 형식 .txt 파일을 읽어 파이썬에 인접 목록 사전을 만들려고하고

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 내가이 걱정 것입니다. :)

어떻게 진행해야합니까?

+0

표시 할 코드가 있습니까? – Astrom

+0

작은 부분으로 나누세요. 먼저 파일을 열고 각 줄을 인쇄하십시오. 그럼 거기서가. –

+0

@Astrom heloo, 제발 다시 봐, 내가 편집 한 게시물, 나는 그것이 도움이되기를 바랍니다 :) – Marios

답변

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) 

그리고 양방향 확인하는 가장 쉬운 방법은 사전 둘 방법을 추가하는 것이다

di = {} 

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

print(di) 
+0

그 하나! – Astrom

+0

@ Jammeth_Q 입력 해 주셔서 감사합니다. 답변을 업데이트했습니다. – Neil

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]

관련 문제