Hash in Hash, aber wie?
Verfasst: Dienstag 2. Mai 2006, 15:15
Ich mache mir gerade Gedanken darüber wie ich über einen Hash auf einen Wert über quasi drei unterschielichen keys eindeutig zugreifen kann.
Meine erste Idee war einen Hash mit einem Hash zu verketten, leider war der zweite Hash nicht eindeutig und wurde ständig überspielt.
Die Bezeichnungen mal dahin gestellt. Das Probolem ist das ich die Daten nach und nach aus einer Datei einlese in der in jeder Zeile Gen, Atom und MM oder PM und ein spezieller Wert der mit allen drei vorherigen Einträgen in Verbindung steht. In einer anderen Zeile steht dann für PM oder für MM, je nach dem was vorher schon einmal aufgetaucht war, die selben Einträge für Gen und Atom und ein weiterer Wert. Jedem MM und PM soll also ein Wert zugewiesen, der in Verbindung mit einem Gen und einem Atom steht.
Mein Versuch der leider nicht eindeutig war sah folgendermaßen aus.
sl[2] = MM or PM
sl[3] = Atom
sl[4] = Value
sl[5] = Gen
Kann man vielleicht einen Hash anlegen dem man drei Keys zuweisen kann um einen Wert zu speichern?
Etwas vergleichbares hab ich auch in Perl gesehen, allerdings hab ichs nicht geschafft in Python um zu bauen, wäre aber genial wenn ich so hinbekommen könnte da das selbe so in einer Zeile erledigt wurde:
$pmMMArray{$GEN}{$PMorMM}{$ATOM}=$Value;
Meine erste Idee war einen Hash mit einem Hash zu verketten, leider war der zweite Hash nicht eindeutig und wurde ständig überspielt.
Code: Alles auswählen
# hash1
# |------------|
# key key value vlaue
# | Gen | Atom | MM | PM |
# |-------------|
# hash2
Mein Versuch der leider nicht eindeutig war sah folgendermaßen aus.
sl[2] = MM or PM
sl[3] = Atom
sl[4] = Value
sl[5] = Gen
Code: Alles auswählen
#!/usr/bin/python
file = open('../../1/development/abm1.out','r')
genHash = {}
atomHash = {}
for line in file:
sl = line.split() # [S]plited[L]ine
if not atomHash.has_key(sl[3]): # wenn key nicht vorhanden, dann initialisiere den atomHash
atomHash[sl[3]] = {'MM':'none','PM':'none'}
if 'MM' in sp[2]: # weise dem MM einen Wert zu
atomHash[sl[3]]['MM'] = sl[4]
else:
atomHash[sl[3]]['PM'] = sl[4] # weise dem PM einen Wert zu
genHash[sl[5]] = {'median':'none','atom':atomHash[sl[3]]}
Kann man vielleicht einen Hash anlegen dem man drei Keys zuweisen kann um einen Wert zu speichern?
Etwas vergleichbares hab ich auch in Perl gesehen, allerdings hab ichs nicht geschafft in Python um zu bauen, wäre aber genial wenn ich so hinbekommen könnte da das selbe so in einer Zeile erledigt wurde:
$pmMMArray{$GEN}{$PMorMM}{$ATOM}=$Value;