Python 如何将tuple转换为namedtuple?
我希望在内部使用namedtuples,但我希望保持与提供普通元组的用户的兼容性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
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')