networkx 中的标记节点

Labelling nodes in networkx

我正在尝试从 URL 中提取一组值。该集合具有唯一的数字列表。此列表中的元素数应等于节点数。所以这些节点得到的标签应该来自提取的列表。如何使用 networkx 执行此操作?

我遇到了这个标记节点的函数:

nx.draw_networkx_labels(G,pos,labels,font_size=16)

这里,'labels'需要是dict类型。

import networkx as nx
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
soup = BeautifulSoup(br.response().read())
counter = 0
idvalue = []
doTags = soup.find_all("div", {"class":"classname"})
for tag in doTags:
    id = tag.find_next("span",{"class":"classname"})
    print id.string
    idvalue.append(id.string)
    counter +=1 
print counter
G = nx.Graph()
H=nx.path_graph(counter+1)
G.add_nodes_from(H) 
nx.draw(G)
nx.draw_networkx_labels(G,labels,font_size=16)
plt.show()

有什么方法可以将 'idvalue' 转换为 dict 吗?或者 networkx 中是否有任何其他功能可以使这项工作更容易?请帮忙。提前致谢。

您可以使用 list comprehensions and dict() 函数

将列表 idvalue 转换为字典
labels = dict( [ value for value in enumerate(idvalue) ] )

例子

>>> lst = ['a', 'b', 'c', 'd']
>>> dict([ x for x in enumerate(lst) ])
{0: 'a', 1: 'b', 2: 'c', 3: 'd'}

备注

  • 您在程序中使用的 counter 变量非常无用,因为您可以从列表长度中获取该值。

也就是你可以这样写

H = nx.path_graph( len(idvalue) )