簡體   English   中英

找出兩個圖形之間的差異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM