В вашем примере bb
- это диктовка, ключами которой являются узлы.Вам не нужно, чтобы dict имел ключ для всех узлов в графе, а только для узлов, для которых вы хотите определить атрибут.В приведенном ниже примере я создаю график, а затем устанавливаю 'weight'
узла 0
равным 5
и узла 3
равным 2
.Это оставляет атрибуты для других узлов незатронутыми, поэтому, поскольку они никогда не создавались, они не существуют.
import networkx as nx
G = nx.fast_gnp_random_graph(10,0.2)
nx.set_node_attributes(G, {0:5, 3:2}, 'weight')
G.nodes[0]['weight']
> 5
G.nodes[3]['weight']
> 2
G.nodes[1]['weight']
> KeyError: 'weight'
Поэтому мы устанавливаем вес для 0
и 3
, но не для любыхиз других.Вы также можете установить более одного атрибута одновременно, но для этого требуется немного другой вызов.Здесь мы имеем
nx.set_node_attributes(G, {1:{'weight':-1, 'volume':4}})
G.nodes[1]['weight']
> -1
G.nodes[1]['volume']
> 4
Просто чтобы посмотреть, как выглядят атрибуты после всего этого:
G.nodes(data=True)
> NodeDataView({0: {'weight': 5}, 1: {'weight': -1, 'volume': 4}, 2: {}, 3: {'weight': 2}, 4: {}, 5: {}, 6: {}, 7: {}, 8: {}, 9: {}})