
Ich denke aber auch, dass hier ein dict die richtige Struktur ist.
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()))