将 NamedTuple 转换为 dict 以用于字典解包的 Pythonic 方法(**kwargs)

Int*_*rer 0 python dictionary namedtuple iterable-unpacking

我有一个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))
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最 Pythonic 方法是什么?我正在使用 Python 3.8+。


更多细节

这是一个NamedTuple可以使用的示例:

from typing import NamedTuple

class Foo(NamedTuple):
    f: float
    b: bool = True

foo = Foo(1.0)
Run Code Online (Sandbox Code Playgroud)

尝试kwarg_func(**dict(foo))提出一个TypeError

TypeError: cannot convert dictionary update sequence element #0 to a sequence
Run Code Online (Sandbox Code Playgroud)

根据这篇文章collections.namedtuple_asdict()作品:

TypeError: cannot convert dictionary update sequence element #0 to a sequence
Run Code Online (Sandbox Code Playgroud)

但是,既然_asdict是私有的,我想知道,有没有更好的方法?

jua*_*aga 5

使用._asdict.

._asdict不是私人的。它是 API 的一个公开的、记录在案的部分。从文档

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