Py学习  »  Python

如何使用包含节点和边的python dict构建g networkx?

Ramiro Tormenta • 4 年前 • 625 次点击  

考虑一个元组列表。此列表将转换为字典,其中主关键字是节点和边。

例子:

ls = [('a', 1), ('b', 2), ('c', 3), ('a', 2), ('b', 3)]

为了达到这个结果,我导入了 networkx 图书馆。

import networkx as nx
G = nx.Graph()
G.add_edges_from(ls)

但是,当我转换的时候 G图 node_link_data : nx.readwrite.json_graph.node_link_data(G) 我发现有些项(源和目标)是颠倒的,例如,元组列表中的第二个项被分类为 来源 相反 目标

# original tuple
('b', 2)

# node_link_data
links: [
  {'source': 2, 'target': 'b'}
  ...
]

所以,我创造了我自己的口述 {'nodes': [], 'links': []} .

我想用这个dict创建networkx图。我对使用这个库的算法来测量节点感兴趣。

我尝试使用:

G = nx.Graph(myDict)

这将返回一个错误: TypeError: Input is not known type

如何使用已经包含节点和边的dict构建此图?或者,我可以使用其他库来度量度、集群等。而是使用其他库。提前谢谢

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38170
 
625 次点击  
文章 [ 1 ]  |  最新文章 4 年前
vash_the_stampede
Reply   •   1 楼
vash_the_stampede    5 年前

因此,问题似乎是有些元组没有正确地组织,无法从列表到字典进行一致的转换,您可以这样做:测试这些元组的索引

ls = [('a', 1), (2, 'b'), (3, 'c'), ('a', 2), ('b', 3)]
links = []
for i in ls:
    try:
        if i[0].isalpha():
            links.append({'source': i[1], 'target': i[0]})
    except AttributeError:
        links.append({'source': i[0], 'target': i[1]})

print(links)
# [{'source': 1, 'target': 'a'}, {'source': 2, 'target': 'b'}, {'source': 3, 'target': 'c'}, {'source': 2, 'target': 'a'}, {'source': 3, 'target': 'b'}]

我们要测试一下 i[0] 如果它的字母至少有一个字符,如果它是,我们将它附加到目标和 i[1] 到来源。另一方面,如果它恰好是 int 将引发一个错误,我们可以使用 try/except 捕捉那个错误,这告诉我们,现在我们的int在 我[ 0 ] 所以我们可以用 我[ 0 ] 作为来源和 我[ 1 ] 作为目标。