2016-04-04 16 views
0

Bir anahtar temelinde farklılaştırılmış düğümler arasında birden çok kenar olabileceği bir MultiDiGraph var. Grafikte birçok anahtarım var ve bunların üzerinde yinelemek, her anahtar için bir görev yapmak istiyorum.Python ağ geçidindeki kenar anahtarları nasıl alınır veya yinelenir MultiDiGraph

Bununla başa çıkabileceğim bir yol, tüm kenarların üzerinde yineleme yapmak ve anahtarları bir kümede saklamaktır.

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 

Ama bu daha sonra tekrar keys üzerinde ben sonuçta G kenarları boyunca ilerlerken olacaklarından, müthiş verimsiz görünüyor ve: Sonra o setin elemanları üzerinde ilerlerken mümkün olacak.

Ben yol boyunca Setimden inşa ederek bu daha verimli hale anlıyorum:

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

    keys.add(key) 
    # do something 

Ama gerçekten ben sadece rastlamak değil networkx özel bir şey, ya da bazı deyim vardır umut ediyorum bunu düzgün yapmak için. Herhangi bir fikir? Onları erişmenin tek yolu veriler üzerinde yineleme tarafından yani

cevap

0

NetworkX bitişiklik yapısında anahtarları saklar

Bu en iyi şekilde

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

gibi görünüyor Eğer tuşları ekleyebilir olarak sürece kenarları. Anahtarları, eklediğiniz gibi ayrı bir veri yapısında depolamak için add_edge yöntemini alt sınıflayabilirsiniz.

İlgili konular