2015-03-01 2 views
2

Я загружаю данные о телефонных звонках в список namedtuples, называемый «records». Каждый телефонный звонок имеет информацию о длительности вызова в переменной «call_duration». Тем не менее, некоторые имеют переменную, установленную в None. Я хотел бы, чтобы заменить None с нулем во всех записях, но следующий код не похож на работу:Замена значения переменной в списке названных кортежей

for r in records: 
     if r.call_duration is None: 
      r = r._replace(call_duration=0) 

Как заменить значение в списке? Я думаю, проблема в том, что новый «r» не сохраняется в списке. Что было бы лучшим способом захвата в изменении списка?

+1

написать точный код. –

+0

Что такое 'r' ...? – thefourtheye

+2

не связаны, но вы должны использовать 'is None' –

ответ

2

Вы можете заменить старую запись, указав ее индекс в списке records. Вы можете получить этот индекс, используя enumerate():

for i, rec in enumerate(records): 
    if rec.call_duration is None: 
     records[i] = rec._replace(call_duration=0) 
0

Я предлагаю вам создать свой собственный класс, это принесет пользу вам в будущем, насколько объект управление идет. Если вы хотите создать методы позже для записи, вы сможете легко это сделать в классе:

class Record: 
    def __init__(self, number = None, length = None): 
     self.number = number 
     self.length = length 

    def replace(self, **kwargs): 
     self.__dict__.update(kwargs) 

Теперь вы можете легко управлять записями и заменить атрибуты объектов, как вы считаете необходимыми.

for r in records: 
    if r.length is None: 
     r.replace(length = 0) 
Смежные вопросы