将 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)
有没有办法将 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)