我有以下表格的字典
{ 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))
但这是很耗时的,因为很多对边缘早已被诱导为其他集团诱导的一部分。是否有更有效的方式来诱导这些集团?也许对这些派系进行一些后期处理?
答案 0 :(得分:1)
如果您准备了所有唯一边的列表,然后一次性添加它们,您可能会得到一些改进:
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)。