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

发布于 2024-10-18 20:40:53 字数 310 浏览 5 评论 0原文

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

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

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

我需要将其转换为边缘,因此方向被组合起来,看起来像这样:

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

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

I'm trying to convert a set of arcs to a set of edges for some simple visualization work.

my arc data currently looks like:

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

I need to convert it to edges, so the directions are combined, looking like this:

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

I'm thinking there should be a very pythonic way to do this, but not sure what the most elegant way is.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

零度℉ 2024-10-25 20:40:53

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

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

Here's an approach using a dictionary where the keys are the ends of the arc in sorted order:

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()]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文