将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 的一个公开的、记录在案的部分。从文档:

除了从元组继承的方法之外,命名元组还支持三个附加方法和两个属性。为防止与字段名称冲突,方法和属性名称以下划线开头。


以上是将NamedTuple转换为dict以用于字典解包的Pythonic方法(**kwargs)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>