在Python中快速将有向图转换为无向图(邻接表)的方法?

2 投票
1 回答
658 浏览
提问于 2025-04-16 12:10

我正在尝试把一组弧线转换成一组边,用于一些简单的可视化工作。

我现在的弧线数据看起来是这样的:

(
  ['A','B',2],
  ['B','A',3],
  ['A','C',4],
  ['B','C',2],
)

我需要把它转换成边,这样方向就能合并,看起来像这样:

(
  ['A','B',5],
  ['A','C',4],
  ['B','C',2],
)

我在想应该有一种很“Python风格”的方法来做到这一点,但不太确定最优雅的方式是什么。

1 个回答

6

这里有一种方法,使用字典来存储数据,字典的键是按顺序排列的弧的端点:

import collections
d = collections.defaultdict(int)
for n1, n2, v in arcdata:
    d[min(n1, n2), max(n1, n2)] += v
result = [[k[0], k[1], v] for k, v in d.iteritems()]

撰写回答