python - 将 NamedTuple 转换为 dict 以用于字典解包 (**kwargs) 的 Pythonic 方式
问题描述
我有一个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))
完成此任务的最 Pythonic 方式是什么?我正在使用 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
是私人的,我想知道,有没有更好的方法?
解决方案
使用._asdict
.
._asdict
不是私人的。它是 API 的一个公开的、记录在案的部分。从文档:
除了从元组继承的方法外,命名元组还支持三个附加方法和两个属性。为防止与字段名称冲突,方法和属性名称以下划线开头。