Seite 1 von 2

Verfasst: Mittwoch 29. April 2009, 10:08
von EyDu
Und nach welcher Regel werden die zu erweiternden Tupel ausgewählt? Nach der Hälfte? Zufall? Andere seltsame Dinge?

Verfasst: Mittwoch 29. April 2009, 10:16
von abstract
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.

Code: Alles auswählen

[(index1, wertx), (index2, wertx), (index3, wertx)... (index50000, wertx), (index1, werty), (index2, werty), (index3, werty).....(index50000, werty)...]
und die liste dann soll ja die tabelle darstellen:

Code: Alles auswählen

[(index1,wertx,werty....), (index2,wertx,werty....), (index3,wertx,werty.....) .... (index50000,wertx,werty....)]
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

Verfasst: Mittwoch 29. April 2009, 10:43
von b.esser-wisser
Wäre sowas nicht praktischer?

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],
    }
hth, Jörg

Verfasst: Mittwoch 29. April 2009, 12:12
von abstract
Cool, klappt wunderbar.

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
kriege ich es irgendwie willkürlich sortiert:

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]})
ich kanns ja danach sortieren, aber eigentlich müsste es doch schon richtig sortiert rauskommen oder ?

THANX

CU

Verfasst: Mittwoch 29. April 2009, 12:23
von b.esser-wisser
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)

Verfasst: Mittwoch 29. April 2009, 12:48
von str1442
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.

Verfasst: Mittwoch 29. April 2009, 13:25
von abstract
Jo stimmt, ich hatte ne klammer falsch"ARGH", ist sogar noch geeigneter da ich gleich ne liste mit den werten bekomme.

THANX an alle

kann geclosed werden.

CU