python中命名元组元素的循环

python中命名元组元素的循环,python,namedtuple,Python,Namedtuple,我有一个命名元组,我给它赋值如下: class test(object): self.CFTs = collections.namedtuple('CFTs', 'c4annual c4perren c3perren ntfixing') self.CFTs.c4annual = numpy.zeros(shape=(self.yshape, self.xshape)) self.CFTs.c4perren = numpy

我有一个命名元组,我给它赋值如下:

class test(object):
            self.CFTs = collections.namedtuple('CFTs', 'c4annual c4perren c3perren ntfixing')

            self.CFTs.c4annual = numpy.zeros(shape=(self.yshape, self.xshape))
            self.CFTs.c4perren = numpy.zeros(shape=(self.yshape, self.xshape))
            self.CFTs.c3perren = numpy.zeros(shape=(self.yshape, self.xshape))
            self.CFTs.ntfixing = numpy.zeros(shape=(self.yshape, self.xshape))
有没有一种方法可以循环命名元组的元素?我尝试过这样做,但不起作用:

for fld in self.CFTs._fields:
                self.CFTs.fld= numpy.zeros(shape=(self.yshape, self.xshape))

namedtuple是一个元组,因此可以像在普通元组上一样进行迭代:

>>> from collections import namedtuple
>>> A = namedtuple('A', ['a', 'b'])
>>> for i in A(1,2):
    print i


1
2
但是元组是不可变的,因此不能更改值

如果需要字段名称,可以使用:

>>> a = A(1, 2)
>>> for name, value in a._asdict().iteritems():
    print name
    print value


a
1
b
2

>>> for fld in a._fields:
    print fld
    print getattr(a, fld)


a
1
b
2
输出:

x 1
y 2

可以像普通元组一样简单地循环项目:

>>> from collections import namedtuple
>>> A = namedtuple('A', ['a', 'b'])
>>> for i in A(1,2):
    print i


1
2
MyNamedtuple=namedtuple(“MyNamedtuple”、“a b”)
a_namedtuple=MyNamedtuple(a=1,b=2)
对于i,在一个\u命名的整数中:
印刷品(一)
在Python 3.6中,如果需要属性名,现在需要执行以下操作:

对于名称,使用\u namedtuple中的值。\u asdict().items()
打印(名称、值)


如果您尝试使用
a\u namedtuple.\u asdict().iteritems()
它将抛出
AttributeError:“collections.orderedict”对象没有属性“iteritems”

谢谢@Pawel,这是关于不变性的好观点。有什么方法可以根据我的特定代码调整您的响应吗?只需将a替换为self.ctfs这似乎在Python 3.6中起作用:
a.\u asdict().items()
@thorCaller是一个函数,而不是属性。你能删除你的评论吗?对于python3来说,这是一个误导性的..iteritems()->.items()