Ich möchte, dass jeder Knoten eine IP-Adresszeichenfolge sowie Breiten- und Längengradwerte hat. Wie bekomme ich außerdem einen Zeiger auf ein solches Objekt, wenn ich den von networkx erstellten Graphen durchsuche?
Antwort
Zu viele Anzeigen?NetworkX basiert auf der Idee, dass Graphen wie Wörterbücher fungieren können. Sie benötigen kein benutzerdefiniertes Objekt, das als Knoten fungiert, da den Knoten beliebige Eigenschaften in ihre "Wörterbücher" hinzugefügt werden können.
Betrachten Sie die folgende interaktive Sitzung:
>>> import networkx as nx
>>> G = nx.Graph()
>>> G.add_node(1)
>>> G.node[1]['ipaddress'] = '8.8.8.8'
>>> G.node[1]['longitude'] = 37
>>> G.node[1]['latitude'] = 50
>>> G.node[1]
{'latitude': 50, 'ipaddress': '8.8.8.8', 'longitude': 37}
>>> G.node[1]['ipaddress']
'8.8.8.8'
Hier wird ein Graph mit einem einzelnen Knoten 1
erstellt, dem ipaddress
, longitude
und latitude
zugeordnet sind. Sie greifen über die Abfrage des Knotens direkt auf diesen in konstanter Zeit zu und erhalten dessen Eigenschaften auf ähnliche Weise.
Um auf spezifische Knoten zu verweisen, haben Sie verschiedene Möglichkeiten. Sie könnten z.B. ein Wörterbuch verwenden, um eine Liste oder Menge von Knoten für gewünschte Eigenschaften zu speichern. Die zweite Möglichkeit - die nur für eine einzige Eigenschaft, die jedem Knoten eindeutig zugeordnet ist, nützlich ist - ist die Verwendung der Eigenschaft als direkter Knoten. Z. B. für IP-Adressen:
>>> H = nx.Graph()
>>> H.add_node('8.8.8.8', longitude=37, latitude=50)
>>> H.node['8.8.8.8']
{'latitude': 50, 'longitude': 37}
Hier habe ich auch von einer von NetworkX bereitgestellten Bequemlichkeit Gebrauch gemacht, um die Eigenschaften bei der Erstellung des Knotens anzugeben.