namedtuple中的namedtuple的Python语法

Yan*_*nis 10 python namedtuple python-3.x

是否有可能namedtuple在另一个内部namedtuple

例如:

from collections import namedtuple

Position = namedtuple('Position', 'x y')
Token = namedtuple('Token', ['key', 'value', Position])
Run Code Online (Sandbox Code Playgroud)

它给出了"ValueError:类型名称和字段名称必须是有效的标识符"

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

Łuk*_*ski 19

您正在混淆两个概念 - 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
Run Code Online (Sandbox Code Playgroud)

  • 它是完美的数据结构,其中嵌套了另一个数据结构.如果你正在解决的问题是正确的,为什么不呢?你必须记住它是一个数据结构,而不是一个类.对于复杂对象,通常使用适当的方法创建类更好. (3认同)
  • 傻我!感谢您的解释和随附的代码.那么,嵌套的namedtuple被认为是一种好习惯吗?你知道其他选择吗? (2认同)