NetworkX attraversamento nodo
Domanda
Utilizzando biblioteca NetworkX di Python, ho creato un grafo non orientato per rappresentare una rete di relazioni tra le varie persone. Un frammento di mio codice è qui sotto:
import networkx as nx
def creategraph(filepath):
G=nx.Graph()
#All the various nodes and edges are added in this stretch of code.
return G
Da quello che ho capito, ogni nodo è fondamentalmente un dizionario. Il problema che questo presenta a me è che voglio per eseguire un diverso tipo di algoritmo di Random Walk. Ora prima di saltare su di me e mi dicono di utilizzare una delle funzioni standard della biblioteca NetworkX, voglio sottolineare che si tratta di un algoritmo personalizzato. Supponiamo che io corro la funzione creategraph, e l'oggetto G è tornato e memorizzati in un altro oggetto (chiamiamolo X). Voglio cominciare ad un nodo denominato 'Bob'. Bob è collegato ad Alice e Joe. Ora, voglio riassegnare Y per puntare a Alice o Bob a caso (con i dati ho a che fare con un dato nodo potrebbe avere centinaia di bordi lasciando esso). Come procedo a fare questo? Inoltre, come faccio a trattare con le voci Unicode in dict di un determinato nodo (come come Alice e Joe sono elencati di seguito?)
X = creategraph("filename")
Y=X['Bob']
print Y
>> {u'Alice': {}, u'Joe': {}}
Soluzione
Il funzione nel modulo casuale potrebbe aiutare con il processo di selezione. Non avete davvero bisogno di preoccuparsi della distinzione tra unicode e la stringa a meno che non si sta cercando di scrivere loro fuori da qualche parte, come a volte i caratteri Unicode non sono traducibili nel set di caratteri ASCII che Python default.
Il modo in cui usereste random.choice sarebbe qualcosa sulla falsariga di:
Y = Y[random.choice(Y.keys())]