2017-04-18 5 views
0

私はこの形式で.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 

は私がする結果の辞書をしたいですダイレクトように見えるにもかかわらず、その[1,3] ...}など

注意:

adjacency_list_dict = {[1] [2] {[2,3,10]、このフォーマットのそれは実際には無向であり、辞書内の各キーのリスト値は、すべての隣接ノードを含む必要があります。 example [10]:[1,4,7] txtファイル行の最初の列に10が入っていないにもかかわらず。

は、今私は、このコードブロックで立ち往生しています:

# 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]

関連する問題