Преобразовать список в namedtuple - программирование
Подтвердить что ты не робот

Преобразовать список в namedtuple

В python 3 у меня есть кортеж Row и массив A как следующий

Row = namedtuple('Row', ['first', 'second', 'third'])
A = ['1', '2', '3']

Как вставить этот массив в named tuple? Обратите внимание, что в моей ситуации я не могу напрямую это сделать:

newRow = Row('1', '2', '3')

Я пробовал разные методы

1. newRow = Row(Row(x) for x in A)
2. newRow = Row() + data             # don't know if it is correct
4b9b3361

Ответ 1

Вы можете сделать Row(*A), который использует распаковку аргументов.

>>> from collections import namedtuple
>>> Row = namedtuple('Row', ['first', 'second', 'third'])
>>> A = ['1', '2', '3']
>>> Row(*A)
Row(first='1', second='2', third='3')

Обратите внимание, что если ваш linter не слишком много жалуется на использование методов, начинающихся с подчеркивания, namedtuple предоставляет _make альтернативный конструктор classmethod.

>>> Row._make([1, 2, 3])

Не позволяйте префикс подчеркивания обмануть вас - это часть документально подтвержденного API для этого класса, на который можно положиться, чтобы быть там во всех реализациях python и т.д.

Ответ 2

В подклассе namedtuple есть метод с именем "_make". Вставка массива (списка Python) в namedtuple Объекты легко использовать с помощью метода "_make":

>>> from collections import namedtuple
>>> Row = namedtuple('Row', ['first', 'second', 'third'])
>>> A = ['1', '2', '3']
>>> Row._make(A)
Row(first='1', second='2', third='3')

>>> c = Row._make(A)
>>> c.first
'1'