2011-04-03 88 views
1

我正在使用字典來表示Python程序中的圖形。我使用字典的鍵來表示頂點和值來表示每個頂點的相鄰節點。這本字典目前看起來是這樣的:如何使用Python中的字典創建igraph對象

{ 
    'v1' : ['v2','v3'], 
    'v2' : ['v1'], 
    'v3' : ['v1','v4'], 
    'v4' : ['v3'] 
    // And so on. 
} 

是否有創建這個字典中的新igraph object一個簡單的方法?如果沒有簡單的方法,那麼下一個最好的選擇是什麼?

+0

igraph格式如何?有沒有Python的庫? – pajton 2011-04-03 18:12:32

+0

@pajton:檢查'python-igraph'包。 – kennytm 2011-04-03 18:25:23

回答

4

那麼,根據docs,看起來igraph預計vertices編碼爲integers。所以,你需要從你的verticesintegers指定mapping然後你實際上可以進行例如像這樣:

G= {'v1': ['v2', 'v3'], 'v2': ['v1'], 'v3': ['v1', 'v4'], 'v4': ['v3']} 
mvi= {'v1': 1, 'v2': 2, 'v3': 3, 'v4': 4} 
graph= igraph.Graph(edges= [(mvi[v], mvi[a]) for v in G.keys() for a in G[v]]) 
+1

謝謝,有道理。這是一個很大的數據集,所以我可能需要編寫另一個腳本來創建映射字典。 – john 2011-04-03 18:48:59

+1

你可以使用'enumerate'建立'mvi'。 – kennytm 2011-04-03 18:54:03

+0

啊從來沒有聽說過枚舉,我正在考慮將所有的頂點放入一個數組,然後使用.index而不是使用字典。這可能是更好的方法 – john 2011-04-03 19:02:08

0

我做了這樣的事情,其進口的名字頂點到圖形也:

relations = {'v1': ['v2','v3'], 'v2': ['v1'], 'v3': ['v1','v4']} 
g = igraph.Graph() 
g.add_vertices(list(set(list(relations.keys()) + list([a for v in relations.values() for a in v])))) 
g.add_edges([(v, a) for v in relations.keys() for a in relations[v]])