У меня есть typing.NamedTuple
, который я хотел бы преобразовать в dict
, чтобы я мог передать функцию через распаковку словаря:
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))
Каков самый питонический способ добиться этого? Я использую Python 3.8+.
Подробнее
Вот пример NamedTuple
для работы:
from typing import NamedTuple
class Foo(NamedTuple):
f: float
b: bool = True
foo = Foo(1.0)
Попытка kwarg_func(**dict(foo))
поднимает TypeError
:
TypeError: cannot convert dictionary update sequence element #0 to a sequence
Согласно этому сообщению на collections.namedtuple
, _asdict()
работает:
kwarg_func(**foo._asdict())
{'f': 1.0, 'b': True}
Однако, поскольку _asdict
является частным, мне интересно, есть ли лучший способ?