python - create - ¿Cómo convertir tuple en namedtuple?
namedtuple python (1)
Me gustaría usar timbres nombrados internamente, pero quiero preservar la compatibilidad con los usuarios que me dan una tupla normal.
from collections import namedtuple
tuplePi=(1,3.14,"pi") #Normal tuple
Record=namedtuple("MyNamedTuple", ["ID", "Value", "Name"])
namedE=Record(2, 2.79, "e") #Named tuple
namedPi=Record(tuplePi) #Error
TypeError: __new__() missing 2 required positional arguments: ''Value'' and ''Name''
tuplePi.__class__=Record
TypeError: __class__ assignment: only for heap types
Puedes usar la sintaxis de llamadas *args
:
namedPi = Record(*tuplePi)
Esto pasa en cada elemento de la secuencia tuplePi
como un argumento separado.
También puede usar el método de clase namedtuple._make()
para convertir cualquier secuencia en una instancia:
namedPi = Record._make(tuplePi)
Manifestación:
>>> from collections import namedtuple
>>> Record = namedtuple("MyNamedTuple", ["ID", "Value", "Name"])
>>> tuplePi = (1, 3.14, "pi")
>>> Record(*tuplePi)
MyNamedTuple(ID=1, Value=3.14, Name=''pi'')
>>> Record._make(tuplePi)
MyNamedTuple(ID=1, Value=3.14, Name=''pi'')