Подтвердить что ты не робот

Как наложить кортеж в namedtuple?

Я хотел бы использовать namedtuples внутренне, но я хочу сохранить совместимость с пользователями, которые кормят меня обычным кортежем.

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
4b9b3361

Ответ 1

Вы можете использовать синтаксис вызова *args:

namedPi = Record(*tuplePi)

Это передается в каждом элементе последовательности tuplePi как отдельный аргумент.

Вы также можете использовать метод класса namedtuple._make(), чтобы превратить любую последовательность в экземпляр:

namedPi = Record._make(tuplePi)

Демо:

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