36

在 python 3 中,我有一个元组Row和一个列表A

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

如何Row使用列表进行初始化A?请注意,在我的情况下,我不能直接这样做:

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
4

2 回答 2

73

您可以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提供一个_makeclassmethod 替代构造函数。

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

不要让下划线前缀欺骗你——这该类的文档化 API 的一部分,并且可以依赖于所有 python 实现等......

于 2013-03-10T16:27:15.990 回答
1

namedtuple 子类有一个名为“_make”的方法。使用“_make”方法将数组(Python 列表)插入到命名元组对象中很容易:

>>> 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'
于 2014-01-20T02:15:20.503 回答