2016-02-10 52 views
1

我試圖從一個不同的路徑導入一個大的字典列表。我想在不同的文件上使用字典,這樣我的程序就可以看起來更整潔了。從我的項目中的不同路徑導入字典

import heapq 

x = raw_input() 
y = raw_input() 

def shortestPath(start, end): 
    queue,seen = [(0, start, [])], set() 
    while True: 
     (cost, v, path) = heapq.heappop(queue) 
     if v not in seen: 
      path = path + [v] 
      seen.add(v) 
      if v == end: 
       return cost, path 
      for (next, c) in graph[v].iteritems(): 
       heapq.heappush(queue, (cost + c, next, path)) 


graph = { 
    'a': {'w': 16, 'x': 9, 'y': 11}, 
    'b': {'w': 11, 'z': 8}, 
    'w': {'a': 16, 'b': 11, 'y': 4}, 
    'x': {'a': 9, 'y': 12, 'z': 17}, 
    'y': {'a': 11, 'w': 4, 'x': 12, 'z': 13}, 
    'z': {'b': 8, 'x': 17, 'y': 13}, 
} 
cost, path = shortestPath(x, y) 
print cost 

因此,這是一個程序的一部分與我說的小字典,但我已經使它在另一個文件上更大。我想刪除小字典並從另一個文件導入更大的圖表。另一個文件被稱爲Graph.py

+0

創建一個具有模塊的類。該模塊可以返回字典。 ** class.YourDictionary()**類型的語法 – Nabin

+1

你試過'從圖形導入圖形'嗎? – Selcuk

+0

@Selcuk - 我曾嘗試'從圖形導入圖形',但它保持灰色,它說「圖形」沒有任何屬性 – wallace

回答

2

你main.py

import heapq 
    import Graph 

    x = raw_input() 
    y = raw_input() 

    def shortestPath(start, end): 
     queue,seen = [(0, start, [])], set() 
     while True: 
      (cost, v, path) = heapq.heappop(queue) 
      if v not in seen: 
       path = path + [v] 
       seen.add(v) 
       if v == end: 
        return cost, path 
       for (next, c) in graph[v].iteritems(): 
        heapq.heappush(queue, (cost + c, next, path)) 


    graph = Graph.graph 
    cost, path = shortestPath(x, y) 
    print cost 

你Graph.py

graph = { 
    'a': {'w': 16, 'x': 9, 'y': 11}, 
    'b': {'w': 11, 'z': 8}, 
    'w': {'a': 16, 'b': 11, 'y': 4}, 
    'x': {'a': 9, 'y': 12, 'z': 17}, 
    'y': {'a': 11, 'w': 4, 'x': 12, 'z': 13}, 
    'z': {'b': 8, 'x': 17, 'y': 13}, 
}#add your complex dictionary 

您可以從Graph.py像變量導入圖形。

0

你可以考慮具有普適JSON格式的數據,只是導入它像

import json 
import sys 

def main(fn): 
    with open(fn) as f: 
     graph = json.load(f) 
    x = raw_input() 
    y = raw_input() 
    cost, _ = shortest_path(graph, x, y) 
    print cost 

def shortest_path(graph, x, y): 
    # .... Your code. Notice that i've given graph as an argument here 

if __name__ == '__main__': 
    main(sys.argv[1]) 

然後運行腳本像 python yourscript.py mygraph.json

哪裏mygraph。 json類似於:

{ 
    "a": { 
    "y": 11, 
    "x": 9, 
    "w": 16 
    }, 
    "b": { 
    "z": 8, 
    "w": 11 
    }, 
    "w": { 
    "a": 16, 
    "y": 4, 
    "b": 11 
    }, 
    "y": { 
    "a": 11, 
    "x": 12, 
    "z": 13, 
    "w": 4 
    }, 
    "x": { 
    "a": 9, 
    "y": 12, 
    "z": 17 
    }, 
    "z": { 
    "y": 13, 
    "x": 17, 
    "b": 8 
    } 
} 
+0

你的建議很好,但只有當「shortestPath」函數是該程序的一部分時,他纔會發出問題。如果我加入它,它會改變程序的行爲方式。我正在查看是否可以使用「從圖形導入*」或其他方式工作。 – wallace

1

創建一個包含字典定義作爲屬性的類第一個文件file_1

class myDictionary(): 
    def __init__(self): 
     self.dictionary = {'a': {'w': 16, 'x': 9, 'y': 11}, 
          'b': {'w': 11, 'z': 8}, 
          'w': {'a': 16, 'b': 11, 'y': 4}, 
          'x': {'a': 9, 'y': 12, 'z': 17}, 
          'y': {'a': 11, 'w': 4, 'x': 12, 'z': 13}, 
          'z': {'b': 8, 'x': 17, 'y': 13},} 

    def getDictionary(self): 
     return self.dictionary 

然後在第二個文件file_2,只需創建類的實例,並調用將返回字典的功能。

import file_1 

graph = file_1.myDictionary().getDictionary() 
相關問題