命名元组内命名元组的 Python 语法

Posted

技术标签:

【中文标题】命名元组内命名元组的 Python 语法【英文标题】:Python syntax for namedtuple inside a namedtuple 【发布时间】:2016-07-22 22:54:46 【问题描述】:

是否可以在另一个namedtuple 中包含namedtuple

例如:

from collections import namedtuple

Position = namedtuple('Position', 'x y')
Token = namedtuple('Token', ['key', 'value', Position])

这给出了一个“ValueError:类型名称和字段名称必须是有效的标识符”

另外,我很好奇是否有更Pythonic 的方法 来构建这样一个嵌套容器?

【问题讨论】:

【参考方案1】:

您混淆了两个概念 - namedtuple 的结构和分配给它们的值。结构需要唯一名称列表。值可以是任何值,包括另一个 namedtuple

from collections import namedtuple

Position = namedtuple('Position', 'x y')
Token = namedtuple('Token', ['key', 'value', 'position'])

t = Token('ABC', 'DEF', Position(1, 2))
assert t.position.x == 1

【讨论】:

傻我!感谢您的解释和随附的代码。那么,嵌套的命名元组是否被认为是一种好习惯?你知道有什么替代品吗? 这是一个完美的数据结构,其中嵌套了另一个数据结构。如果它对你正在解决的问题是正确的,为什么不呢?你只需要记住它是一个数据结构,而不是一个类。对于复杂的对象,通常最好使用适当的方法创建一个类。

以上是关于命名元组内命名元组的 Python 语法的主要内容,如果未能解决你的问题,请参考以下文章

在python中循环命名元组的元素

python 命名元组(namedtuple)

#yyds干货盘点# 6. Python 元组,不可变的列表,滚雪球学 Python

python学习--为元组中每个元素命名

为啥 Python 不支持记录类型? (即可变的命名元组)

如何使用字段名称的变量访问命名元组的字段?