将 python 可变命名列表转换为不可变命名元组

Convert python mutable namedlist to immutable namedtuple

有没有办法将 python 可变命名列表转换或复制为不可变命名元组?

根据评论进行编辑:

我有一个填满值的命名列表

>>> from namedlist import namedlist
>>> nl = namedlist('myList', 'a b c d')

>>> L = ['A', 'B', 'C', 'D']
>>> D = dict(zip(nl._fields,L))
>>> NL = nl(**D)

>>> NL
myList(a='A', b='B', c='C', d='D')

这个可变命名列表 NL 可以这样改变:

>>> NL.a = 'X'

>>> NL
myList(a='X', b='B', c='C', d='D')

然后我也创建了一个具有相同字段的名称元组

from collections import namedtuple
nt = namedtuple('myTuple', nl._fields)

问题

现在是否可以创建一个不可变的 namedtuple NT,并根据 namedlist NL 中的值填充值?

来自评论的回答:

使用:

>>> NT = nt(*NL)

>>> NT
myTuple(a='X', b='B', c='C', d='D')

无法更改此不可变命名元组:

>>> NT.a = 'Y'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: can't set attribute

如果你指的是由 pip install namedlist 安装的包,那么如果你有一个这样定义的命名列表:

from namedlist import namedlist
nl = namedlist('myList', 'a b c d')

你可以做一个对应的namedtuple:

from collections import namedtuple
nt = namedtuple('myTuple', 'a b c d')
# or, you if you want to copy the names
nt = namedtuple('myTuple', nl._fields)

使用示例可能如下所示:

l = nl(1,2,3,4)      # myList(a=1, b=2, c=3, d=4)
t = nt(*l)           # myTuple(a=1, b=2, c=3, d=4)