2016-03-28 90 views
-3

我是新來的Python和需要有關dictionaries.I有一個文本文件從.txt文件中讀取並創建一個嵌套的字典蟒蛇

1;2;0.0008131 
1;714;0.0001097 
714;715;0.0016285 
715;796;0.0014631 
... 

代表與圖形源和destiantion節點一些幫助成本。我想讀的文件,並創建格式

{'1': {'2': 0.0008131, '714': 0.0001097}, 
     '2': {'1': 0.0008131, '523': 0.0001097}, 
     '3': {'252': 0.0001052, '613':0.0002097}, 

的字典等與他們之間的每一個鄰接節點和成本的每個節點。

+3

請問您可以在此顯示您的代碼嘗試嗎?解釋什麼目前沒有爲你工作。如果有堆棧跟蹤,則顯示任何錯誤消息。 – idjaw

+0

由於1 - > 2與2 - > 1相同,因此您可能需要自定義的__getitem __()方法,將這兩個數字按升序排序,並在內部存儲成本爲1 - > 2。 – Reti43

+0

我想圖結構就像一個鄰接表一樣,每個關鍵字都有其相鄰節點的成本。 –

回答

0

我認爲以下簡單的代碼應該適合你。

# Open your text file 
f = open('file.dat') 

# Create empty dictionary 
graph = {} 

for line in f: 
    x = line.rstrip().split(";") 
    if not x[0] in graph: 
     graph[x[0]] = {x[1] : x[2]} 
    else: 
     graph[x[0]][x[1]] = x[2] 

    if not x[1] in graph: 
     graph[x[1]] = {x[0] : x[2]} 
    else: 
     graph[x[1]][x[0]] = x[2] 

print(graph) 

其中是你想要的最終字典。

+0

cosole說: graph [x [0]] = {x [1]:x [2]} 「IndexError:列表索引超出範圍」 –

+0

您的文件在每行中是否有3列?如果我使用您在開始時提供的幾行文本文件,我的代碼將爲我提供所需的輸出。 – Peaceful

+0

你說得對,1行有一個特殊字符,修正它。 Thanx的幫助,但有什麼辦法來消除'\ n'的成本?即時通訊使用此圖作爲Dijkstra最短路徑計算的輸入。我是否需要將第三列轉換爲整數類型或類似的東西? –