如何将元组转换为命名元组?
我想在内部使用命名元组,但又希望能和那些给我普通元组的用户保持兼容。
from collections import namedtuple
tuple_pi = (1, 3.14, "pi") #Normal tuple
Record = namedtuple("Record", ["ID", "Value", "Name"])
named_e = Record(2, 2.79, "e") #Named tuple
named_pi = Record(tuple_pi) #Error
TypeError: __new__() missing 2 required positional arguments: 'Value' and 'Name'
tuple_pi.__class__ = Record
TypeError: __class__ assignment: only for heap types
1 个回答
85
你可以使用 *args
这种调用方式:
named_pi = Record(*tuple_pi)
这样做会把 tuple_pi
这个序列里的每一个元素都当作单独的参数传进去。
你还可以使用 namedtuple._make()
这个类方法,把任何序列转换成一个实例:
named_pi = Record._make(tuple_pi)
示例:
>>> from collections import namedtuple
>>> Record = namedtuple("Record", ["ID", "Value", "Name"])
>>> tuple_pi = (1, 3.14, "pi")
>>> Record(*tuple_pi)
Record(ID=1, Value=3.14, Name='pi')
>>> Record._make(tuple_pi)
Record(ID=1, Value=3.14, Name='pi')