【发布时间】: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