networkx:将集团分解为独特的边缘

networkx: decomposing cliques into unique edges

我有以下形式的字典

{   0: [1, 2, 3, 4, 5]
    1: [6, 2, 3, 4, 5]
    2: [3, 4, 5, 6, 7]
    3: [8, 9]
    ...
}

每个值(未排序的列表)都对应于我想在我的图表中引入的一个集团。不幸的是,如您所见,许多派系共享顶点,而这些顶点也是其他派系的一部分。现在我对这些派系进行了直接的归纳:

for clique in clique_dict.itervalues(): 
    graph.add_edges_from(combinations(clique, 2))

但这是耗时的,因为许多边对已经作为其他集团归纳的一部分更早地归纳出来。有没有更有效的方法来诱导这些派系?也许 post 对这些派系本身进行处理?

如果您准备一个包含所有唯一边的列表然后一次添加它们,您可能会得到一些轻微的改进:

edges = set(chain.from_iterable([tuple(sorted(pair)) for pair 
            in combinations(clique, 2)] for clique in clique_dict.values()))
graph.add_edges_from(edges)

添加排序以避免出现像 (2,3) 和 (3,2) 这样的反平行边。