Jo, danke. Hatte es inzwischen auch kapiert
Ich denke aber auch, dass hier ein dict die richtige Struktur ist.
mehrere Listen durchlaufen
Hallo,
ich hatte den Beitrag abgeschickt und dann erst gemerkt, das neue Antworten vorhanden waren.
Bei der Methode mit den dict muss man jedoch 2 mal das ganze konvertieren, von Listen -> dict -> Listen
mfg
Twilo
ich hatte den Beitrag abgeschickt und dann erst gemerkt, das neue Antworten vorhanden waren.
Bei der Methode mit den dict muss man jedoch 2 mal das ganze konvertieren, von Listen -> dict -> Listen
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']
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
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:
Code: Alles auswählen
def ungroup(g, names):
return (names,
[g[n]["type"] for n in names],
[g[n]["value"] for n in names])
Hallo,
Wobei gegen die gleiche Reihenfolge nichts einzuwenden ist
mfg
Twilo
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])
Wobei gegen die gleiche Reihenfolge nichts einzuwenden ist
mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Ich würde es so machen:
Und wenn die Reihenfolge keine Rolle spielt, geht auch das:
Gruß,
Mick.
*edit*
group geht auch kürzer:
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())
Mick.
*edit*
group geht auch kürzer:
Code: Alles auswählen
def group(ns, ts, vs):
return dict(zip(ns, zip(ns,ts,vs)))
Zuletzt geändert von pillmuncher am Donnerstag 12. November 2009, 14:13, insgesamt 1-mal geändert.
In specifications, Murphy's Law supersedes Ohm's.
Hallo,
Die ungroup Methode müßte nur noch statt 3 Tuples 3 Listen zurückgeben.
Kann man irgendwie die zip-Funktion dazu bewegen, dass sie listen statt tuples zurückgibt?
Ansonsten könnte ich auch folgendes verwenden:
mfg
Twilo
wo kann ich mehr über das Sternchen erfahren?pillmuncher hat geschrieben:Code: Alles auswählen
def ungroup(d): return zip(*d.values())
Die ungroup Methode müßte nur noch statt 3 Tuples 3 Listen zurückgeben.
Kann man irgendwie die zip-Funktion dazu bewegen, dass sie listen statt tuples zurückgibt?
Ansonsten könnte ich auch folgendes verwenden:
Code: Alles auswählen
def ungroup(d):
return [list(e) for e in zip(*d.values())]
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
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())
Es wäre übrigens besser gewesen, wenn ich gleich itertools.izip verwendet hätte:
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)
Gruß,
Mick.
In specifications, Murphy's Law supersedes Ohm's.
Dann kannst du auch gleich imap verwenden:
Code: Alles auswählen
def ungroup(d):
return imap(list, izip(*d.values()))
Das Leben ist wie ein Tennisball.