1. ホーム
  2. python

[解決済み] ノード属性の保存とアクセス python networkx

2022-03-04 09:10:17

質問

Pythonで作成したノードのネットワークがあります。 networkx ノードに情報を保存し、ノードラベル(ノードの名前)と情報が保存されているフィールド(ノードの属性のようなもの)に基づいて、後で情報にアクセスできるようにしたいのです。 xyz はノードです。

の生年月日のような文字列を持つフィールドを2つまたは3つ保存したいのです。 xyz dob=1185 の出生地は xyz pob=usa の生年月日と xyz dayob=monday .

を使用できることは知っています。 G.add_node には属性辞書のフィールドがありますが、特定のフィールドにアクセスすることができません。

を比較したい。 xyz は,同じ情報を共有するネットワーク内の他のノードと交差する。 xyz とノード abc 生年月日、出生地、生年月日をもとにした

例:ifノード xyzabc は、それぞれの dob の場合、その pob とその dayob s

解決方法は?

おっしゃるとおり、グラフにノードを追加する際に、属性を追加すればよいだけです

G.add_node('abc', dob=1185, pob='usa', dayob='monday')

または辞書として

G.add_node('abc', {'dob': 1185, 'pob': 'usa', 'dayob': 'monday'})

属性にアクセスするには、他の辞書と同じようにアクセスするだけです。

G.node['abc']['dob'] # 1185
G.node['abc']['pob'] # usa
G.node['abc']['dayob'] # monday

接続されているノードの属性を見たいということですね。ここでは、それを実現するための小さな例を紹介します。

for n1, n2 in G.edges_iter():
    print G.node[n1]['dob'], G.node[n2]['dob']
    print G.node[n1]['pob'], G.node[n2]['pob']
    # Etc.

networkx 2.0 では、G.edges_iter() は G.edges() に置き換わりました。これはノードにも適用されます。我々は data=True で属性にアクセスできます。コードはこれで

for n1, n2 in list(G.edges(data=True)):
    print G.node[n1]['dob'], G.node[n2]['dob']
    print G.node[n1]['pob'], G.node[n2]['pob']
    # Etc.

NOTE ネットワークx 2.4 , G.node[] に置き換わっています。 G.nodes[] .