2015-11-29 5 views
8

Я именованный кортеж, который я задаю значение нравится:Looping над элементами именем кортежа в питоне

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

ответ

7

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 
+0

спасибо @Pawel, хорошая точка неизменяемости. Как вы можете адаптировать свой ответ к моему конкретному коду? – user308827

+1

просто замените a на self.CTFs –

+0

Я не нашел свойство _asdict на python3, я использовал 'argp .__ dict __. Items()' вместо – ThorSummoner

 Смежные вопросы

  • Нет связанных вопросов^_^