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'