Liste aus Listen erstellen
also wie schon beschrieben kriege ich ja ne ellenlange doppelliste mit den rückgabewerten eines walks. entscheidend ist der index.
d.h.
es ist quasi ein table mit 10 spalten und x zeilen, wobei die zeilen ja aus dem index und 10 werten bestehen.
die werte laufen aber bei dem walk in 2er gruppen rein und ich will die dann so in die tabelle zerlegen wie ich sie mit nem table view kriege.
und die liste dann soll ja die tabelle darstellen:
da ich die anzahl der gesamtzeilen auslesen kann, weiß ich ja dass sich z.b. jede 50 stelle ein weiterer wert zu dem index befindet und so füttere ich die 10 werte zu dem einem index.
Sorry wenn es nicht ganz klar wurde.
CU
d.h.
es ist quasi ein table mit 10 spalten und x zeilen, wobei die zeilen ja aus dem index und 10 werten bestehen.
die werte laufen aber bei dem walk in 2er gruppen rein und ich will die dann so in die tabelle zerlegen wie ich sie mit nem table view kriege.
Code: Alles auswählen
[(index1, wertx), (index2, wertx), (index3, wertx)... (index50000, wertx), (index1, werty), (index2, werty), (index3, werty).....(index50000, werty)...]
Code: Alles auswählen
[(index1,wertx,werty....), (index2,wertx,werty....), (index3,wertx,werty.....) .... (index50000,wertx,werty....)]
Sorry wenn es nicht ganz klar wurde.
CU
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
Wäre sowas nicht praktischer?
hth, Jörg
Code: Alles auswählen
the_data = collections.defaultdict(list)
#...
for oid, val in results:
the_data[oid].append(val)
# so sieht's dann aus:
the_data = {
index1:[wertx,werty],
index2:[wertx,werty],
index3:[wertx,werty],
#...
index50000:[wertx,werty],
}
Cool, klappt wunderbar.
noch ne kleine frage, wenn ich das hier in der sanbox laufen lasse:
kriege ich es irgendwie willkürlich sortiert:
ich kanns ja danach sortieren, aber eigentlich müsste es doch schon richtig sortiert rauskommen oder ?
THANX
CU
noch ne kleine frage, wenn ich das hier in der sanbox laufen lasse:
Code: Alles auswählen
a = [(1,1),(3,2),(55,3),(64,4),(109,5),(1,6),(3,7),(55,8),(64,9),(109,10),(1,11),(3,12),(55,13),(64,14),(109,15)]
for oid, val in a:
the_data[oid].append(val)
print the_data
Code: Alles auswählen
defaultdict(<type 'list'>, {64: [4, 9, 14], 1: [1, 6, 11], 3: [2, 7, 12], 109: [5, 10, 15], 55: [3, 8, 13]})
THANX
CU
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
Nö, dictionaries sind unsortiert, d.h. du darfst dich nie auf die Reihenfolge verlassen.
(unnützes 'Insider'-wissen: CPython sortiert dict()s nach den Hash's der Keys - aber das ist implementation defined)
(unnützes 'Insider'-wissen: CPython sortiert dict()s nach den Hash's der Keys - aber das ist implementation defined)
Mein Code funktioniert. Für jedes beliebige Iterable, das als wiederum Tupel-ähnliche Objekte enthält, wird nach dem 0ten Element gruppiert. Wenn du statt dem (line.split("|") for line in a.split("\n")) deine Beispielliste eingibst, bekommst du genau den Output den du willst.