概要
研究でNetworkXを使っているのですが,特定の属性を持つノードを検索したくなって,そのようなメソッドがあるか探してみた結果どうやらなさそうなので作りました.
コード
find_specific_attribute_node.py
import networkx as nx
def find_specific_attribute_node(G, attr, value):
result = []
d = nx.get_node_attributes(G, attr)
for key, v in d.items():
if(v == value):
result.append(key)
return result
動作例
以下の様なテストプログラムを走らせてみます.
find_node_test_for_qiita.py
import networkx as nx
from find_specific_attribute_node import find_specific_attribute_node as find_nodes
if __name__ == '__main__':
Graph = nx.DiGraph()
Graph.add_node('a', color = 'blue')
Graph.add_node('b', color = 'red')
Graph.add_node('c', color = 'blue')
Graph.add_node('d', color = 'red')
Graph.add_node('e', color = 'blue')
Graph.add_node('f', color = 'red')
print(find_nodes(Graph, 'color', 'blue'))
以下実行結果です.
実行結果
['a', 'e', 'c']
color
属性にblue
が設定されているノード名からなるリストが取得できていることがわかります.
説明
すごい適当に作ったものなのでアレですが,引数は以下の3つです.
- G : 検索対象となるグラフ
- attr : 検索したい属性名
- value : 見つけたいattrの値
返り値は見つかったノード名のリストです.
おわりに
すごく要求されそうなものなので実際はNetworkXに似たような機能のメソッドが存在しているのかもしれません.誰か教えて下さい.
あと,メソッドとかの命名規則をちゃんと勉強してないので,「こういう名前をつけたほうがいい」とかありましたら教えていただけると僕が嬉しいです……