将 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

根据 this post on collections.namedtuple_asdict() 有效:

kwarg_func(**foo._asdict())
{'f': 1.0,'b': True}

但是,由于 _asdict 是私有的,我想知道有没有更好的方法

解决方法

使用._asdict

._asdict非私有。它是 API 的一个公开的、记录在案的部分。 From the docs

除了继承自元组的方法,命名元组支持 三个附加方法和两个属性。为了防止与 字段名、方法名和属性名以下划线开头。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...