有没有办法将python可变命名列表转换或复制到不可变的namedtuple?
根据评论编辑:
我有一个名为
的名单>>> 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)
问题
现在是否可以根据namedlist NL中的值创建一个带有填充值的不可变的namedtuple NT?
评论中的答案:
使用:
>>> 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
答案 0 :(得分:0)
如果您指的是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)