我有两个清单。其中一个具有这种数据结构:在每一行中,第一个元素是ID,第二个是电子邮件地址。
['0', 'kvogel@politico.com']
['1','ababab@politico.com']
第二个名单是一个"谁写信给谁"列表,在每一行中,第一个ID号码是发件人,第二个ID是收件人
['0', '4']
['0', '6']
['1', '4']
顺便说一下,括号实际上并不是列表的一部分。这是我的jupyter笔记本输出。第一个列表大约有2000个,第二个列表有40000个行。在下面的代码中,我从第一个列表添加节点 - 在本例中是电子邮件地址。然后我遍历第二个列表并使用给定的ID在节点之间创建边缘。
first =-1
second =-1
for row in idsList:
g.add_nodes_from(row[1])
for row in dncList:
for i in range (len(idsList)):
if (row[0]==idsList[i][0]):
first=i;
elif(row[1]==idsList[i][0]):
second=i
g.add_edge(idsList[first][1],idsList[second][1])
nx.draw_networkx(g,with_labels = False, node_size = 30)
plt.show()
但是,我无法看到节点之间的边缘。上面的代码生成下图。用edges()
打印给我列出了所有边缘,所以没问题。我在这里失踪了什么?
答案 0 :(得分:2)
您的图表目前看起来未定向。您应该更改此设置并使其成为有向图,除非您应该使其无向。应该解决它。
g = nx.DiGraph()
答案 1 :(得分:0)
您的边缘生成可能存在问题。例如,sec
未定义,first
或second
可能会保留上一次迭代。
如果您将第一个列表转换为词典,则不会需要第二个循环。这是定义图表的更快捷方式:
import networkx as nx
import matplotlib.pyplot as plt
l1 = [ ['0', 'kvogel@politico.com'],
['1','ababab@politico.com'],
['2','c'],
['3','d'],
['4','e']
]
l2 = [['0', '4'],
['0', '2'],
['2', '3'],
['1', '3'],
['1', '2'],
['1', '4']]
addresses = dict(l1)
g = nx.Graph()
for address in addresses.values():
g.add_node(address)
for i1, i2 in l2:
g.add_edge(addresses[i1], addresses[i2])
nx.draw_networkx(g,with_labels = False, node_size = 30)
plt.show()