Liste aus Listen erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 29. April 2009, 10:08

Und nach welcher Regel werden die zu erweiternden Tupel ausgewählt? Nach der Hälfte? Zufall? Andere seltsame Dinge?
Das Leben ist wie ein Tennisball.
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

Mittwoch 29. April 2009, 10:16

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
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Mittwoch 29. April 2009, 10:43

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
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

Mittwoch 29. April 2009, 12:12

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
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Mittwoch 29. April 2009, 12:23

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)
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Mittwoch 29. April 2009, 12:48

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.
abstract
User
Beiträge: 33
Registriert: Mittwoch 14. September 2005, 09:29

Mittwoch 29. April 2009, 13:25

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
Antworten