我正在使用圖形資料結構解決我的一個子問題。我已經使用以頂點作為鍵和邊作為節點串列的字典來實作它。例子:
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)
uj5u.com熱心網友回復:
您可以使用以下內容:
注意。這假設字典具有相同的鍵(如果沒有,請使所需的輸出顯式
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': []}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/322845.html
上一篇:為什么我們不能在調度方法表中為函式添加括號-Python?
下一篇:獲取dict的特定部分
