我在python中有一个名为tuple的类
class Town(collections.namedtuple('Town', [
'name',
'population',
'coordinates',
'population',
'capital',
'state_bird'])):
# ...
Run Code Online (Sandbox Code Playgroud)
我想做的是将其变成字典.我承认python不是我强大的语言之一.关键是我不希望它与我所拥有的字段的名称或数字紧密相关.
有没有办法写它,以便我可以添加更多的字段,或传递一个完全不同的命名元组并获取字典.
编辑:我不能改变原来的类定义,因为它在别人的代码中.所以我需要一个城镇的实例并将其转换为字典.
例如:
>>> Spoken = namedtuple("Spoken", ["loudness", "pitch"])
>>> s = Spoken(loudness=90, pitch='high')
>>> str(s)
"Spoken(loudness=90, pitch='high')"
Run Code Online (Sandbox Code Playgroud)
我想要的是:
>>> str(s)
90
Run Code Online (Sandbox Code Playgroud)
那就是我希望字符串表示显示响度属性.这可能吗 ?
我正在研究一些想要引入 Python 3.6 以便在以 3.5 为标准的环境中使用的软件。阅读Python的文档我找不到任何关于是否:
事实上,这个关于移植到 3.7 的页面的存在让我强烈认为不,但我看不到关于版本号含义的官方文档(如果有的话,ala Linux 内核版本控制)
从更一般的意义上来说 - 3.X 版本流中是否存在围绕兼容性标准的 PEP?
python backwards-compatibility forward-compatibility python-3.x
我在一些地方读到过,一般来说,Python 不提供向后兼容性,这意味着任何较新版本的 Python 都可能会破坏在早期版本中运行良好的代码。如果是这样,作为开发人员,我如何知道哪些版本的 Python 可以成功执行我的代码?对此有什么规则/保证吗?或者我应该告诉我的用户:只需使用 Python 3.8(例如)运行它 - 不多也不少......?
我有一个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)