【问题标题】:Finding difference between two graphs找出两个图之间的差异
【发布时间】:2021-12-05 06:42:52
【问题描述】:

我正在使用图形数据结构解决我的一个子问题。我已经使用以顶点作为键和边作为节点列表的字典来实现它。示例:

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之间的对称差异。

我尝试按照this 链接中的建议设置差异。但由于这些值是列表,我收到错误TypeError: unhashable type: 'list'。我知道这是因为集合是不可变的,而列表是可变的数据结构。并且类型转换正在产生错误。

我还尝试使用this 链接中给出的数据帧差异,我得到与上述相同的类型错误。

有没有简单的方法来获得解决方案?任何帮助表示赞赏。在此先感谢:)

PS:我想让我的图形实现简单。因此,我没有使用任何像 networkx 这样的高级库。

编辑 1: 请注意,我想要的结果有点类似于一组对称差异的结果,而不是完全对称的差异。

使用结果,我想了解两个图中哪些所有节点都不同。结果应包含两个图中边列表不同的节点。喜欢:

'2' : [] (graph1)
'2' : ['3'] (graph2)

and

'3' : ['1','7'] (graph1)
'3' : ['1','2'] (graph2)

【问题讨论】:

  • 结果正常吗?为什么graph1-graph2中有[1, 7]?
  • 为什么2出现在第一个差异中,而1没有出现?
  • @DaniMesejo -我还想要有关具有不同边缘的节点的信息。在graph1中,'3'连接到'1'和'7',而在graph2中它连接到'1'和'2'。我想强调这一点。
  • @j1-lee - 对,我想要对称差异类型的结果
  • @user2390182 - '1' 在两个图中都有相同的边列表,即它在两个图中都连接到 '3'。我只想要两个图中具有不同连接的节点。

标签: python dictionary set-difference


【解决方案1】:

您可以使用以下内容:

注意。这假设字典具有相同的键(如果没有,请明确显示所需的输出

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': []}

【讨论】:

  • 字典确实有相同的键。这个解决方案对我有用。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2014-08-15
  • 1970-01-01
相关资源
最近更新 更多