在networkx中标记节点

时间:2015-06-10 05:20:21

标签: python graph beautifulsoup label networkx

我正在尝试从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中还有其他功能可以让这项工作更轻松吗?请帮忙。提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用list comprehensionsdict()功能

将列表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) )