Seite 1 von 1

Tupel von Paaren ohne dict entpacken

Verfasst: Samstag 17. Januar 2015, 21:41
von doppelkeks
Hallo allerseits,

Ist es möglich, Tupel von Paaren zu entpacken, ohne vorher ein dict daraus zu machen?
Öfters baue ich in solchen Situation ein dict einfach nur, um es sofort wieder zu entpacken.
In längeren Schleifen könnte sich der Overhead von der Erzeugung der dicts auf eine relevante Größe summieren.

Code: Alles auswählen

>>> def f(a=0, b=0):
...    return "a: {}, b: {}".format(a,b)
...
>>> names = ('a', 'b')
>>> values = (1, 2)

# das klappt natürlich
>>> f(**dict(zip(names, values)))
'a: 1, b: 2'

# das geht nicht
>>> f(**zip(names, values))
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: f() argument after ** must be a mapping, not list

# das natürlich auch nicht
>>> f(*zip(names, values))
"a: ('a', 1), b: ('b', 2)"

# das ist einfach nur krank. Geht auch nur mit unveränderbaren Typen wie str, int, tuple
>>> eval("f({})".format(",".join(map(lambda a,b: "{}={}".format(a,b), names, values))))
'a: 1, b:2'

Re: Tupel von Paaren ohne dict entpacken

Verfasst: Samstag 17. Januar 2015, 21:51
von EyDu
Suchst du einfach nur das?

Code: Alles auswählen

t = 23, 42
f(*t)
Sonst stellt sich die Frage: Was genau hast du vor? So eine Situation hatte ich nämlich noch nie.

Re: Tupel von Paaren ohne dict entpacken

Verfasst: Samstag 17. Januar 2015, 23:22
von cofi
Um was geht es dir denn genau? Funktionen mit Keyword-Argumenten zu fuettern oder um das Auspacken von Tupeln?

Fuer letzteres siehe EyDu, fuer ersteres kann ich mir nicht vorstellen wie man zu Dictionaries bzw Paarlisten kommt die laenger als 10 sind (womit der 1. Aufruf kein grosser Overhead ist).

Re: Tupel von Paaren ohne dict entpacken

Verfasst: Sonntag 18. Januar 2015, 02:10
von doppelkeks
Ich habe mich einfach gefragt, ob ich eine Funktion mit kwargs aus Tupeln füttern kann, ohne unbedingt ein dict bauen zu müssen, welches dann entpackt wird.

Das könnte ich beispielsweise beim wiederholten Einlesen von csv Dateien brauchen.
Die können u.U. groß sein - viele Zeilen, viele Spalten.
Ich kann mich nicht darauf verlassen, dass die Reihenfolge der Spalten bei jeder Datei immer gleich ist, daher nehme ich **kwargs statt positionelle *args in meinen "object_from_row"-Factories.

Natürlich ist es jetzt nicht so schwer die Spaltenreihenfolge zu kontrollieren und ggf. umzusortieren, aber ich bin ein Freund von schlichter Eleganz :-)

Re: Tupel von Paaren ohne dict entpacken

Verfasst: Sonntag 18. Januar 2015, 10:14
von Sirius3
@doppelkeks: wenn Geschwindigkeit Dein Problem ist, dann solltest Du zuerst einmal schauen, wo die meiste Zeit verwendet wird. Höchstwahrscheinlich nicht beim Generieren von Dicts. Bei großen Datenmengen ist vielleicht numpy eine Lösung

Re: Tupel von Paaren ohne dict entpacken

Verfasst: Montag 19. Januar 2015, 03:08
von doppelkeks
Zugegeben, so groß sind die Kosten von dicts nicht. Hauptsächlich hat es meine Neugier geweckt.