Python 如何将tuple转换为namedtuple?

Python 如何将tuple转换为namedtuple?,python,python-3.x,namedtuple,Python,Python 3.x,Namedtuple,我希望在内部使用namedtuples,但我希望保持与提供普通元组的用户的兼容性 from collections import namedtuple tuple_pi = (1, 3.14, "pi") #Normal tuple Record = namedtuple("Record", ["ID", "Value", "Name"]) named_e = Record(2, 2.7

我希望在内部使用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

您可以使用
*args
调用语法:

named_pi = Record(*tuple_pi)
这会将
tuple\u pi
序列的每个元素作为单独的参数传入

还可以使用将任何序列转换为实例:

named_pi = Record._make(tuple_pi)
演示:


简明扼要。我不明白你怎么能这么快回答这个问题。您还可以使用关键字args语法来传递dict:MyNamedTuple(**mydict)。当然,dict需要包含元组字段作为键。内存消耗:在使用
namedPi=Record(*tuplePi)
namedPi=Record进行转换后,我可以去掉
tuplePi
。\u make(tuplePi)
,对吗?@thinwybk:是的,namedtuple实例现在引用了包含的相同值,因此您不再需要
tuplePi
tuple.\u新__(记录,元组pi)
是引擎盖下的
\u制作的。
>>> 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')