web-dev-qa-db-fra.com

Faire une boucle sur des éléments de Tuple nommé dans python

J'ai un tuple nommé auquel j'attribue des valeurs comme ceci:

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

Existe-t-il un moyen de parcourir les éléments du tuple nommé? J'ai essayé de le faire, mais cela ne fonctionne pas:

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

namedtuple est un Tuple, vous pouvez donc itérer comme sur un Tuple normal:

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


1
2

mais les tuples sont immuables, vous ne pouvez donc pas modifier la valeur

si vous avez besoin du nom du champ, vous pouvez utiliser:

>>> 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
28
Paweł Kordowski