在python中快速转换为无向图(列表数组)的方法?

Lok*_*oki 2 python data-visualization graph list

我正在尝试将一组弧转换为一组边缘,以进行一些简单的可视化工作.

我的弧数据目前看起来像:

(
  ['A','B',2],
  ['B','A',3],
  ['A','C',4],
  ['B','C',2],
)
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为边缘,因此方向合并,如下所示:

(
  ['A','B',5],
  ['A','C',4],
  ['B','C',2],
)
Run Code Online (Sandbox Code Playgroud)

我认为应该采用非常pythonic的方式来做到这一点,但不确定最优雅的方式是什么.

Mar*_*ers 5

这是一种使用字典的方法,其中键是按照排序顺序的弧的末端:

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()]
Run Code Online (Sandbox Code Playgroud)

  • +1为了获得更多的乐趣(以及ns的可扩展性),使用高级可迭代解包:`for*ns,v in arcdata:d [tuple(sorted(ns))] + = v`. (2认同)