【问题标题】:Fast way to convert directed to undirected graph (array of lists) in python?在python中将有向图(列表数组)转换为无向图的快速方法?
【发布时间】:2011-02-20 15:50:12
【问题描述】:

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

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

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

我需要将它转换为边缘,所以方向被合并,看起来像这样:

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

我认为应该有一个非常 Pythonic 的方式来做到这一点,但不确定最优雅的方式是什么。

【问题讨论】:

    标签: python list graph data-visualization


    【解决方案1】:

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

    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()]
    

    【讨论】:

    • +1 为了获得更多乐趣(以及可扩展性 w.r.t. ns 数量),请使用高级可迭代解包:for *ns, v in arcdata: d[tuple(sorted(ns))] += v
    猜你喜欢
    • 2021-09-30
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2019-01-15
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    相关资源
    最近更新 更多