如何将元组转换为命名元组?
Posted
技术标签:
【中文标题】如何将元组转换为命名元组?【英文标题】:How to cast tuple into namedtuple? 【发布时间】:2014-09-19 22:20:19 【问题描述】:我想在内部使用 namedtuples,但我想保持与给我提供普通元组的用户的兼容性。
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】:您可以使用*args
调用语法:
named_pi = Record(*tuple_pi)
这会将tuple_pi
序列的每个元素作为单独的参数传入。
您还可以使用namedtuple._make()
class method 将任何序列转换为实例:
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')
【讨论】:
简明扼要。我不明白你怎么这么快就回答了这个问题。 不错。您还可以使用关键字 args 语法来交出 dict:MyNamedTuple(**mydict)。当然,dict 需要包含元组字段作为键。 W.r.t.到内存消耗:用namedPi = Record(*tuplePi)
或namedPi = Record._make(tuplePi)
转换后,我可以摆脱tuplePi
,对吧?
@thinwybk:是的,namedtuple 实例现在引用了相同的值,因此您不再需要tuplePi
。
tuple.__new__(Record, tuple_pi)
是 _make
uses 在后台。以上是关于如何将元组转换为命名元组?的主要内容,如果未能解决你的问题,请参考以下文章
如何将元组列表转换为 pandas 数据框,以便每个元组的第一个值代表一列?