问题描述
我有一个 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:
除了继承自元组的方法,命名元组支持 三个附加方法和两个属性。为了防止与 字段名、方法名和属性名以下划线开头。