找出两个图之间的差异
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':[]}
简而言之,我正在寻找 graph1 和 graph2 之间的对称差异。
我尝试按照 link 中的建议获取设置差异。但是由于值是列表,所以我收到错误 TypeError: unhashable type: 'list'
。我明白这是因为集合是不可变的而列表是可变的数据结构。类型转换产生错误。
我也尝试使用 link 中给出的数据帧差异,我遇到了与上述相同的类型错误。
有没有简单的方法得到解决方案?任何帮助表示赞赏。提前致谢:)
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': []}
我正在使用图形数据结构解决我的一个子问题。我已经使用以顶点作为键和边作为节点列表的字典来实现它。示例:
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':[]}
简而言之,我正在寻找 graph1 和 graph2 之间的对称差异。
我尝试按照 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': []}