[英]Computing the Difference between two graphs 'edge wise' in networkx
[英]Finding difference between two graphs
我正在使用圖形數據結構解決我的一個子問題。 我已經使用以頂點作為鍵和邊作為節點列表的字典來實現它。 例子:
graph1 = {'1': ['3'],'2': [],'3': ['1', '7'],'7':['3']}
我想比較兩個圖,即上面的圖與:
graph2 = {'1': ['3'],'2': ['3'],'3': ['1', '2'],'7':[]}
以上兩個圖在邊上是不同的。
我想要這兩個圖的差異信息,例如:
graph1-graph2 = {'2':[],'3':['1','7'],'7':['3']}
graph2-graph1 = {'2':['3'],'3':['1','2'],'7':[]}
簡而言之,我正在尋找圖 1 和圖 2 之間的對稱差異。
我嘗試按照此鏈接中的建議獲取設置差異。 但由於值是列表,我收到錯誤TypeError: unhashable type: 'list'
。 我明白這是因為集合是不可變的,而列表是可變的數據結構。 並且類型轉換正在產生錯誤。
我還嘗試使用此鏈接中給出的數據幀差異,但遇到與上述相同的類型錯誤。
有沒有簡單的方法來獲得解決方案? 任何幫助表示贊賞。 提前致謝 :)
PS:我想讓我的圖實現簡單。 因此,我沒有使用任何像 networkx 這樣的高級庫。
編輯 1 :請注意,我想要的結果有點類似於集合的對稱差異的結果,而不是完全對稱的差異。
使用結果,我想了解兩個圖中的所有節點都不同。 結果應包含兩個圖中邊列表不同的節點。 喜歡:
'2' : [] (graph1)
'2' : ['3'] (graph2)
and
'3' : ['1','7'] (graph1)
'3' : ['1','2'] (graph2)
您可以使用以下內容:
注意。 這假設字典具有相同的鍵(如果沒有,請使所需的輸出顯式
graph1_2 = {}
graph2_1 = {}
for key in graph1:
s1 = set(graph1[key])
s2 = set(graph2[key])
if s1 == s2:
continue
else:
graph1_2[key] = graph1[key]
graph2_1[key] = graph2[key]
輸出:
>>> graph1_2
{'2': [], '3': ['1', '7'], '7': ['3']}
>>> graph2_1
{'2': ['3'], '3': ['1', '2'], '7': []}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.