我正在尝试从URL中提取一组值。该集具有唯一的数字列表。此列表中的元素数应等于节点数。因此,这些节点获得的标签应该来自提取的列表。如何使用networkx执行此操作?
我遇到了这个函数来标记节点:
nx.draw_networkx_labels(G,pos,labels,font_size=16)
这里,'标签'需要是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中还有其他功能可以让这项工作更轻松吗?请帮忙。提前致谢。
答案 0 :(得分:1)
您可以使用list comprehensions和dict()
功能
idvalue
转换为dict
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) )