I have a typing.NamedTuple
that I would like to convert to a dict
so that I can pass into a function via dictionary unpacking:
def kwarg_func(**kwargs) -> None:
print(kwargs)
# This doesn't actually work, I am looking for something like this
kwarg_func(**dict(my_named_tuple))
What is the most Pythonic way to accomplish this? I am using Python 3.8+.
More Details
Here is an example NamedTuple
to work with:
from typing import NamedTuple
class Foo(NamedTuple):
f: float
b: bool = True
foo = Foo(1.0)
Trying kwarg_func(**dict(foo))
raises a TypeError
:
TypeError: cannot convert dictionary update sequence element #0 to a sequence
Per this post on collections.namedtuple
, _asdict()
works:
kwarg_func(**foo._asdict())
{'f': 1.0, 'b': True}
However, since _asdict
is private, I am wondering, is there a better way?