ich hätte eine Frage bzw. hab ein Problem bei dem ich nicht weiter komme. Folgende Problemstellung:
Ich generiere aus einer Datenbank eine Adjacency list welche als dict aufgebaut ist:
{'Knoten1': [('Knoten2',1),
('Knoten3',1),
('Knoten4', 1)],
'Knoten2': [('Knoten1',1),
('Knoten3',1),
('Knoten4', 1)],
.
.
.}
Also erst mal eine Matrix in der jedes Element eine Verknüpfung (mit dem Gewicht 1) zu jedem anderen Element hat ausser sich selbst. Soweit so gut.
Nun möchte ich aber aus einer grossen Menge dieser ersten listen(dict in dict) eine kumulierte erstellen (wobei sich die Knoten Art und Anzahl bei jeder Liste unterscheiden kann. Ist der Knoten nicht vorhanden wird er angelegt, ist er vorhanden soll das Gewicht des Knotens erhöht werden. Das habe ich wie folgt zu lösen versucht:
Code: Alles auswählen
pgraph = {} #hier ist eine "projekt" adjacency list die kumuliert werden soll
wgraph = {} #das soll der kumulierte Gewichtete graph werden.
pgraph.clear()
#construct the adjacency list per project
for module in raw_data: #raw_data sind knoten
pgraph[module] = dict.fromkeys(raw_data, 1)
#Delete dependency of module on it self
if pgraph[module].has_key(module):
del pgraph[module][module]
#bis hier hin funktioniert es. Die Projektliste wird erstellt.
for key in pgraph.keys(): #iterate over the keys of project list
if wgraph.has_key(key): #if the weighted graph has already the key e.g. has the module
for key in pgraph[key].keys(): #iterate over dependencies of the module
if key in wgraph[key]: #hat der knoten bereits die verbindung zu anderen knoten
wgraph[key][key] += 1 #erhöhe das gewicht
else:
wgraph[key] = pgraph[key].items() #ansonsten lege die verbindung zu dem knoten an. HIER LIEGT WOHL DAS PROBLEM: wie greife ich auf das dict im dict zu. keys() geht nicht da er sagt das dies nicht auf listen geht.
else:
#if the key is new, it is appended to the weighted graph
wgraph[key] = pgraph[key].items()
Vielleicht hat ja jemand auf die schnelle eine Lösung.
Vielen Dank
Martin