将NamedTuple转换为dict以用于字典解包的Pythonic方法(**kwargs)
我有一个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
TypeError: cannot convert dictionary update sequence element #0 to a sequence
根据这篇文章collections.namedtuple,_asdict()作品:
但是,既然_asdict是私有的,我想知道,有没有更好的方法?
回答
使用._asdict.
._asdict是不是私人的。它是 API 的一个公开的、记录在案的部分。从文档:
除了从元组继承的方法之外,命名元组还支持三个附加方法和两个属性。为防止与字段名称冲突,方法和属性名称以下划线开头。
THE END
二维码