I have a list of namedtuples: [{Record}(r0=v0, r1=v1,...,r10=v10,r11='',...r93='') . . . {Record}(r0=v0, r1=v1,...,r10=v10,r11='',...r93='')]
In the first section of code, I process some of the first 10 columns (r0=v0, r1=v1,...,r10=v10), and place the results in blank columns, also in the first 10 columns. In the second section of code, I'd like to put calculated values in columns 11-93 (r11='',...r63=''), in which 3 columns will be calculated 28 times for each Record. Is there a way to do this as a step in the loop: for idx, r in enumerate(records): . . . (ideally I'd like to have a loop here, or a function, that would calculate the 28 triplets and replace their empty namedtuples with their calculated values, but this is what I've failed to successfully do.) I've tried writing a function, to either calculate and write 1) all 28 triplets, 2) one triplet, or 3) one column at a time, that would be called in the body of the main loop. The general form of this function has been: def savedata(Records, row, column, data): r = Records[row] col = getattr(r, column) r = r._replace(col = data) but in every case I've tried this, it has failed. Because, I can't say r = r._replace(getattr(r, column) = data) because that gets "can't assign to a function call". And while col ( = getattr(r, column) ) holds the correct value before r = r._replace(col = data) all I get for r.column after the ._replace is an empty string, and I have no idea how that happens. I'm about to rewrite to process first 10 columns as namedtuples, and then unroll the namedtuples into a list of lists, and process the 28 triplets in two for loops. That will work, but I'm wondering if anyone can suggest a way to make my function, or one that accomplishes the same task, so as to preserve the namedtuples, and avoid the need for a second, dual nested loop to finish the second part of the problem. (Note: I have the same dilemma using recordclass instead of namedtuples.) Deborah -- https://mail.python.org/mailman/listinfo/python-list