Verfasst: Donnerstag 12. November 2009, 12:58
Jo, danke. Hatte es inzwischen auch kapiert 
Ich denke aber auch, dass hier ein dict die richtige Struktur ist.

Ich denke aber auch, dass hier ein dict die richtige Struktur ist.
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
def group(names, types, values):
d = {}
for n, t, v in zip(names, types, values):
d[n] = {'type': t, 'value': v}
return d
def ungroup(d):
names = []
types = []
values = []
for e in d.keys():
names.append(e)
types.append(d[e]["type"])
values.append(d[e]["value"])
return names, types, values
names = ["test1", "test2", "test3"]
types = ["text", "text", "text"]
values = ["1", "2", "3"]
names_tmp = ["test2", "test1"]
types_tmp = ["text", "text"]
values_tmp = ["11", "23"]
orig = group(names, types, values)
tmp = group(names_tmp, types_tmp, values_tmp)
orig.update(tmp)
names, types, values = ungroup(orig)
names
types
values
Code: Alles auswählen
In [17]: names
Out[17]: ['test1', 'test3', 'test2']
In [18]: types
Out[18]: ['text', 'text', 'text']
In [19]: values
Out[19]: ['23', '3', '11']
Die Lösung hat aber nicht mehr die richtige Reihenfolge.Twilo hat geschrieben:Code: Alles auswählen
In [17]: names Out[17]: ['test1', 'test3', 'test2'] In [18]: types Out[18]: ['text', 'text', 'text'] In [19]: values Out[19]: ['23', '3', '11']
Code: Alles auswählen
def ungroup(g, names):
return (names,
[g[n]["type"] for n in names],
[g[n]["value"] for n in names])
die Reihenfolge ist zum Glück egal - die Reihenfolge muss dann aber bei jeder der 3 Listen genauso getauscht sein.Zap hat geschrieben:Die Lösung hat aber nicht mehr die richtige Reihenfolge.Twilo hat geschrieben:Code: Alles auswählen
In [17]: names Out[17]: ['test1', 'test3', 'test2'] In [18]: types Out[18]: ['text', 'text', 'text'] In [19]: values Out[19]: ['23', '3', '11']
Dann ehr so:Auch nicht super schön aber die Reihenfolge stimmt wenigstensCode: Alles auswählen
def ungroup(g, names): return (names, [g[n]["type"] for n in names], [g[n]["value"] for n in names])
Code: Alles auswählen
def group(ns, ts, vs):
return dict((n,(n,t,v)) for n,t,v in zip(ns,ts,vs))
def ungroup(d, ns):
return zip(*(d[n] for n in ns))
Code: Alles auswählen
def ungroup(d):
return zip(*d.values())
Code: Alles auswählen
def group(ns, ts, vs):
return dict(zip(ns, zip(ns,ts,vs)))
wo kann ich mehr über das Sternchen erfahren?pillmuncher hat geschrieben:Code: Alles auswählen
def ungroup(d): return zip(*d.values())
Code: Alles auswählen
def ungroup(d):
return [list(e) for e in zip(*d.values())]
Im Python Tutorial, Punkt 4.7.4. Der Punkt 4.7.3 darüber könnte zum Verständnis wichtig sein.Twilo hat geschrieben:wo kann ich mehr über das Sternchen erfahren?pillmuncher hat geschrieben:Code: Alles auswählen
def ungroup(d): return zip(*d.values())
Code: Alles auswählen
from itertools import izip
def group(ns, ts, vs):
return dict(izip(ns,izip(ns,ts,vs)))
def ungroup(d):
for e in izip(*d.values()):
yield list(e)
Code: Alles auswählen
def ungroup(d):
return imap(list, izip(*d.values()))