Hallo
Ich habe folgendes Problem:
Ich habe ein Dictionary, das so aufgebaut ist dict={ 1: [v1_1, v2_1, v3_1], 2: [v1_2, v2_2, v3_2], 3: [......], 4:....}
Aussehen sollte es aber so: dict={ 1: [v1_1,v2_1,v3_1,v4_1,...., v1_i], 2: [v2_1, v2_2,...v2_i], 3: [v3_1, v3_2,...., v3_i].
Kann mir da einer helfen?
mfg
Stefan
Umgestalten von einem Dictionary
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Also zum einen musst Du das schon per Hand umsortieren und zum anderen verstehe ich die Konzeption dahinter nicht! Sicher, dass das so aussehen soll?
Und die "v_*" sind hier keine Bezeicher sondern jetzt nur Platzhalter hoffe ich?
Und die "v_*" sind hier keine Bezeicher sondern jetzt nur Platzhalter hoffe ich?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Hallo Stefan77, willkommen im Forum,
hat es irgendeinen Grund, warum du so eine sinnlose Struktur mit einem Dictionary versuchst zu machen?
Außerdem verstehe ich nicht wie du vom ersten auf das zweite kommst. Beim Key 1 hast du erst v<nummer>_1 und dann v1_<nummer> wohingegen bei den Restlichen v<key_nummer>_<nummer> ist.
hat es irgendeinen Grund, warum du so eine sinnlose Struktur mit einem Dictionary versuchst zu machen?
Außerdem verstehe ich nicht wie du vom ersten auf das zweite kommst. Beim Key 1 hast du erst v<nummer>_1 und dann v1_<nummer> wohingegen bei den Restlichen v<key_nummer>_<nummer> ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Das sind Meßdaten.
Das sind 3 Variablen (stehen im obersten dict als Value) und i Durchläufe (das ist im ersten dict der key). Zur Weiterverarbeitung wäre es aber besser, wenn die nach den Variablen geordnet wären und nicht nach den Durchläufen.
Ich bekomme das erste dict, in dem ich eine ASCII-Datei auslese und diese in ein dict schreibe.
Der Aufbau der ASCII-Datei ist eben eine Matrix, in dem die Spalten die Value sind und die Reihe die Durchläufe (also hier viele Reihen und 3 Spalten).
Besser zur Weiterverarbeitung wäre aber folgender Aufbau:
{Variable1 : [m1, m2, m3,....., mi], Variable2 : [n1,n2,n3,....ni], Variable3 : [o1,o2,o3,....oi]}
Die Variable1 hat also die m als Meßdaten geliefert, die Variable2 die n,...
Die Reihenfolge in der Liste ist demzufolge auch sehr wichtig.
Aber vielleicht ist schon der Ansatz von mir falsch, das erst in ein anderes dict zu schreiben, allerdings ging das so einfach
Das sind 3 Variablen (stehen im obersten dict als Value) und i Durchläufe (das ist im ersten dict der key). Zur Weiterverarbeitung wäre es aber besser, wenn die nach den Variablen geordnet wären und nicht nach den Durchläufen.
Ich bekomme das erste dict, in dem ich eine ASCII-Datei auslese und diese in ein dict schreibe.
Der Aufbau der ASCII-Datei ist eben eine Matrix, in dem die Spalten die Value sind und die Reihe die Durchläufe (also hier viele Reihen und 3 Spalten).
Besser zur Weiterverarbeitung wäre aber folgender Aufbau:
{Variable1 : [m1, m2, m3,....., mi], Variable2 : [n1,n2,n3,....ni], Variable3 : [o1,o2,o3,....oi]}
Die Variable1 hat also die m als Meßdaten geliefert, die Variable2 die n,...
Die Reihenfolge in der Liste ist demzufolge auch sehr wichtig.
Aber vielleicht ist schon der Ansatz von mir falsch, das erst in ein anderes dict zu schreiben, allerdings ging das so einfach
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Dann warum nutzt du dort statt einer Liste ein ungeordnetes Dictionary?Stefan77 hat geschrieben:Die Reihenfolge in der Liste ist demzufolge auch sehr wichtig.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
also ich als python n00b würde das so machen:
wobei du natürlich werte statt meinen strings hast aber wenns dir nur um die position geht ist das mal egal.
obwohl ich davon ausgegangen bin das du einen fehler in deiner angabe gemacht hast, also statt:
quelle = { 1: [v1_1, v2_1, v3_1], 2: [v1_2, v2_2, v3_2], 3: [......], 4:....}
ziel ={ 1: [v1_1,v1_2,v1_3,v1_4,...., v1_i], 2: [v2_1, v2_2,...v2_i], 3: [v3_1, v3_2,...., v3_i].
was ja auch das v1_i in der ersten liste vermuten lässt...
Code: Alles auswählen
a = {1:['v1_1','v2_1','v3_1'],2:['v1_2','v2_2','v3_2'],3:['v1_3','v2_3','v3_3']}
b = a.values()
d=[]
e={}
for i in range(len(a.keys())):
for h in range(len(b[1])):
d.append(b[h][i])
e[i+1]=d[:]
d = []
obwohl ich davon ausgegangen bin das du einen fehler in deiner angabe gemacht hast, also statt:
habe ich das so aufgefasst:Ich habe ein Dictionary, das so aufgebaut ist dict={ 1: [v1_1, v2_1, v3_1], 2: [v1_2, v2_2, v3_2], 3: [......], 4:....}
Aussehen sollte es aber so: dict={ 1: [v1_1,v2_1,v3_1,v4_1,...., v1_i], 2: [v2_1, v2_2,...v2_i], 3: [v3_1, v3_2,...., v3_i].
quelle = { 1: [v1_1, v2_1, v3_1], 2: [v1_2, v2_2, v3_2], 3: [......], 4:....}
ziel ={ 1: [v1_1,v1_2,v1_3,v1_4,...., v1_i], 2: [v2_1, v2_2,...v2_i], 3: [v3_1, v3_2,...., v3_i].
was ja auch das v1_i in der ersten liste vermuten lässt...
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Zeig doch mal einen Ausschnitt aus den original Daten...Stefan77 hat geschrieben:Das sind Meßdaten.
...
Der Aufbau der ASCII-Datei ist eben eine Matrix, in dem die Spalten die Value sind und die Reihe die Durchläufe (also hier viele Reihen und 3 Spalten).
@Holzdolph: Argh! Bitte nochmal neu schreiben: Ohne `range()` und `len()`. Man kann in Python direkt über die Elemente von Listen und die Schlüssel von Dictionaries iterieren.
Wenn man `d` am Anfang der äusseren Schleife an die leere Liste bindet, braucht man das vor der Schleife nicht zu tun. Und die Kopie ist auch sinnfrei.
Wenn man `d` am Anfang der äusseren Schleife an die leere Liste bindet, braucht man das vor der Schleife nicht zu tun. Und die Kopie ist auch sinnfrei.
also fürs dictionary kann man ja a.iterkeys() nehmen aber für die liste brauch ich doch die indizes und nicht deren wert. zumindest mit den 2 for- schleifen komm ich da auf keine andere lösung als:BlackJack hat geschrieben:@Holzdolph: Argh! Bitte nochmal neu schreiben: Ohne `range()` und `len()`. Man kann in Python direkt über die Elemente von Listen und die Schlüssel von Dictionaries iterieren.
Code: Alles auswählen
a = {1:['v1_1','v2_1','v3_1'],2:['v1_2','v2_2','v3_2'],3:['v1_3','v2_3','v3_3']}
b = a.values()
e={}
for i in a.iterkeys():
d = []
for k in range(len(b[i-1])):
d.append(b[k][i-1])
e[i]=d
print a
print e
Tipp: enumerate
Edit: Habe jetzt erst verstanden was das Ding da oben machen soll.
Du brauchst ja nichtmal enumerate. Du kannst auch über die items() eines Dictionaries iterieren. Dann entfällt der ganze Listenkram.
Code: Alles auswählen
enumerate(iterable) -> iterator for index, value of iterable
Return an enumerate object. iterable must be an other object that supports
iteration. The enumerate object yields pairs containing a count (from
zero) and a value yielded by the iterable argument. enumerate is useful
for obtaining an indexed list: (0, seq[0]), (1, seq[1]), (2, seq[2]), ...
Du brauchst ja nichtmal enumerate. Du kannst auch über die items() eines Dictionaries iterieren. Dann entfällt der ganze Listenkram.