我對Python和NetworkX都是新手。我有一個正方形,正常圖G
與NxN
節點(一個晶格)。這些節點通過dict
(參見下面的代碼)進行標記。現在我想讓edgelist
返回每個邊的開始和端點,而不是通過參考節點座標,而是返回給定節點的標籤。用'labels`字典替換`edgelist`的值
例子:
N = 3
G=nx.grid_2d_graph(N,N)
labels = dict(((i, j), i + (N-1-j) * N) for i, j in G.nodes())
#This gives nodes an attribute ID that is identical to their labels
for (i,j) in labels:
G.node[(i,j)] ['ID']= labels[(i,j)]
edgelist=G.edges() #This gives the list of all edges in the format (Start XY, End XY)
如果我N=3
運行它,我得到:
In [14]: labels
Out[14]: {(0, 0): 6, (0, 1): 3, (0, 2): 0, (1, 0): 7, (1, 1): 4, (1, 2): 1, (2, 0): 8, (2, 1): 5, (2, 2): 2}
該方案標籤左上角節點0
,與節點(N-1)th
被放置在右下角。這就是我想要的。現在,隨着edgelist
問題:
In [15]: edgelist
Out [15]: [((0, 1), (0, 0)), ((0, 1), (1, 1)), ((0, 1), (0, 2)), ((1, 2), (1, 1)), ((1, 2), (0, 2)), ((1, 2), (2, 2)), ((0, 0), (1, 0)), ((2, 1), (2, 0)), ((2, 1), (1, 1)), ((2, 1), (2, 2)), ((1, 1), (1, 0)), ((2, 0), (1, 0))]
我試圖解決這些線路的問題(靈感來自這裏:Replace items in a list using a dictionary):
allKeys = {}
for subdict in (labels):
allKeys.update(subdict)
new_edgelist = [allKeys[edge] for edge in edgelist]
,但我得到這個啓迪我週一美妙的事情:
TypeError: cannot convert dictionary update sequence element #0 to a sequence
總結,我希望能夠替換的元素列表與labels
字典的值相比較,以便從((2,0),(1,0))
(其對應於節點和)的邊緣返回(8,7)
。 不盡的感謝!
非常感謝。我確實在聊天中遇到了很多問題,所以我沒有通知。我很抱歉沒有閱讀過此信息。 :) – FaCoffee
順便說一句,該文檔不是很有幫助和描述。如果'G'是我的圖形,'labels'是另一個問題中設置的那些,我怎麼能確定沒有引入跳轉/缺陷/錯誤?我想這是因爲'標籤'的定義方式正確嗎? – FaCoffee
我不太清楚我是否理解你的問題。但是,標籤定義對完美無缺的結果至關重要 –