如何将元组转换为命名元组?

58 投票
1 回答
18254 浏览
提问于 2025-04-18 15:04

我想在内部使用命名元组,但又希望能和那些给我普通元组的用户保持兼容。

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')

撰写回答