2016-04-04 18 views
0

私はMultiDiGraphですが、キーに基づいて区別されるノード間に複数のエッジが存在することがあります。グラフの中には多くのキーがあり、それらを繰り返して各キーのタスクを実行したいと思います。python networkx MultiDiGraphでエッジキーを取得または反復する方法

私はこれを扱うことができる1つの方法は、すべてのエッジを反復し、キーをセットに格納することです。

import networkx as nx 

G = nx.MultiDiGraph() 
G.add_edge('a', 'b', 1) 
G.add_edge('a', 'b', 2) 
G.add_edge('b', 'c', 1) 
G.add_edge('c', 'a', 3) 

# Iterate over edges in the map and store the keys 
keys = set(e[2] for e in G.edges_iter(keys=True)) 

# Now do something for each key 
for key in keys: 
    pass # do something 

しかし、私は最終的に戻ってkeysオーバー再度Gのエッジを反復し、することがありますので、これは、とても非効率です:それから私は、その集合の要素を反復処理することができるようになります。

は、私は道に沿って私のセットを構築することで、これは、より効率的に行うことができることを理解する:

keys = set() 
for e in G.edges_iter(keys=True): 
    key = e[2] 
    if key in keys: 
     continue 

    keys.add(key) 
    # do something 

しかし、私は本当に私はちょうど遭遇していないnetworkxで特別な何か、またはいくつかのイディオムがあります願っていますこれをきちんとする。何か案は?それらにアクセスする唯一の方法は、データを反復処理であるので

答えて

0

NetworkXは、隣接構造のキーを格納し

これが最善の方法

# Iterate over edges in the map and store the keys 
keys = set(e[2] for e in G.edges_iter(keys=True)) 

のように思えるあなたはキーはあなたが追加することができますようしない限り、エッジ。 add_edgeメソッドをサブクラス化して、キーを追加するときに別のデータ構造にキーを格納することができます。

関連する問題