[英]Not able to add networkx nodes and links from a list
我有要測試添加到networkx的節點和鏈接的列表。
不幸的是,我遇到錯誤,無法繪制。 這是節點和鏈接的列表
節點:
[{'id': u'openflow:1'}, {'id': u'host:00:00:00:00:00:01'}, {'id':
u'openflow:2'}, {'id': u'host:00:00:00:00:00:02'}]
鏈接:-
[{u'link-id': u'host:00:00:00:00:00:01/openflow:1:1', u'destination': {u'dest-node': u'openflow:1', u'dest-tp': u'openflow:1:1'}, u'source': {u'source-tp': u'host:00:00:00:00:00:01', u'source-node': u'host:00:00:00:00:00:01'}}, {u'link-id': u'openflow:2:1/host:00:00:00:00:00:02', u'destination': {u'dest-node': u'host:00:00:00:00:00:02', u'dest-tp': u'host:00:00:00:00:00:02'}, u'source': {u'source-tp': u'openflow:2:1', u'source-node': u'openflow:2'}}, {u'link-id': u'openflow:1:2', u'destination': {u'dest-node': u'openflow:2', u'dest-tp': u'openflow:2:2'}, u'source': {u'source-tp': u'openflow:1:2', u'source-node': u'openflow:1'}}, {u'link-id': u'openflow:2:2', u'destination': {u'dest-node': u'openflow:1', u'dest-tp': u'openflow:1:2'}, u'source': {u'source-tp': u'openflow:2:2', u'source-node': u'openflow:2'}}, {u'link-id': u'openflow:1:1/host:00:00:00:00:00:01', u'destination': {u'dest-node': u'host:00:00:00:00:00:01', u'dest-tp': u'host:00:00:00:00:00:01'}, u'source': {u'source-tp': u'openflow:1:1', u'source-node': u'openflow:1'}}, {u'link-id': u'host:00:00:00:00:00:02/openflow:2:1', u'destination': {u'dest-node': u'openflow:2', u'dest-tp': u'openflow:2:1'}, u'source': {u'source-tp': u'host:00:00:00:00:00:02', u'source-node': u'host:00:00:00:00:00:02'}}]
為了進行初始測試,我在下面添加了節點和鏈接
graph.add_nodes_from(node_list)
graph.add_edges_from(link_list)
nx.draw(graph, with_labels=True)
plt.show()
執行代碼時...出現以下錯誤
graph.add_nodes_from(node_list)
File "/usr/local/lib/python2.7/dist-packages/networkx/classes/graph.py", line 560, in add_nodes_from
nn, ndict = n
ValueError: need more than 1 value to unpack
感謝幫助。 謝謝
我真的希望有人可以在這方面幫助我...我認為這只是一個簡單的步驟...但是我還沒有做好...謝謝
任何人都可以幫助我..謝謝
您的代碼,即node_list
和link_list
不正確。 node_list中的一項應為元組,其形式為(node_label,attrib_dict)。 同樣,link_list中的項目(from_node,to_node,attrib_dict)。 這是您可以嘗試的代碼:
import networkx as nx
# there are 4 nodes with data
node_list = [(1,{'id': u'openflow:1'}), \
(2,{'id': u'host:00:00:00:00:00:01'}), \
(3,{'id': u'openflow:2'}), \
(4,{'id': u'host:00:00:00:00:00:02'})]
# only 2 edges will be added for demo purposes
# edge attributes: from node 1 to node 2
d12 = {u'link-id': u'host:00:00:00:00:00:01/openflow:1:1',
u'destination': {u'dest-node': u'openflow:1', u'dest-tp': u'openflow:1:1'},
u'source': {u'source-tp': u'host:00:00:00:00:00:01', u'source-node': u'host:00:00:00:00:00:01'}}
# edge attributes: from node 2 to node 3
d23 = {u'link-id': u'openflow:2:1/host:00:00:00:00:00:02',
u'destination': {u'dest-node': u'host:00:00:00:00:00:02', u'dest-tp': u'host:00:00:00:00:00:02'},
u'source': {u'source-tp': u'openflow:2:1', u'source-node': u'openflow:2'}}
# list of all edges with accomp attributes
link_list = [(1, 2, d12), (2, 3, d23)]
G = nx.Graph()
G.add_nodes_from(node_list)
G.add_edges_from(link_list)
要檢查節點的數據是否完整:
G.nodes(data=True)
響應應為:
NodeDataView({1: {'id': 'openflow:1'}, 2: {'id': 'host:00:00:00:00:00:01'}, 3: {'id': 'openflow:2'}, 4: {'id': 'host:00:00:00:00:00:02'}})
要檢查邊緣的數據是否完整:
G.edges(data=True)
輸出將類似於以下內容:
EdgeDataView([(1, 2, {'link-id': 'host:00:00:00:00:00:01/openflow:1:1', 'destination': {'dest-node': 'openflow:1', 'dest-tp': 'openflow:1:1'}, 'source': {'source-tp': 'host:00:00:00:00:00:01', 'source-node': 'host:00:00:00:00:00:01'}}), (2, 3, {'link-id': 'openflow:2:1/host:00:00:00:00:00:02', 'destination': {'dest-node': 'host:00:00:00:00:00:02', 'dest-tp': 'host:00:00:00:00:00:02'}, 'source': {'source-tp': 'openflow:2:1', 'source-node': 'openflow:2'}})])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.