Peter Otten wrote, on January 08, 2017 3:01 AM
> 
> Deborah Swanson wrote:
> 
> > to do that is with .fget(). Believe me, I tried every > possible way
to 
> > use instance.A or instance[1] and no way could I get ls[instance.A].
> 
> Sorry, no.

I quite agree, I was describing the dead end I was in from peeling the
list of data and the namedtuple from the header row off the csv
separately. That was quite obviously the wrong path to take, but I
didn't know what a good way would be.

> To get a list of namedtuple instances use:
> 
> rows = csv.reader(infile)
> Record = namedtuple("Record", next(rows))
> records = [Record._make(row) for row in rows]

This is slightly different from Steven's suggestion, and it makes a
block of records that I think would be iterable. At any rate all the
data from the csv would belong to a single data structure, and that
seems inherently a good thing.

        a = records[i].A , for example

And I think that this would produce recognizable field names in my code
(which was the original goal) if the following works:

records[0] is the header row == ('Description', 'Location', etc.)

If I can use records[i].Location for the Location column data in row
'i', then I've got my recognizable-field-name variables.  

> If you want a column from a list of records you need to 
> extract it manually:
> 
> columnA = [record.A for record in records]

This is very neat. Something like a list comprehension for named tuples?

Thanks Peter, I'll try it all tomorrow and see how it goes.

PS. I haven't forgotten your defaultdict suggestion, I'm just taking the
suggestions I got in the "Cleaning up Conditionals" thread one at a
time, and I will get to defaultdict. Then I'll look at all of them and
see what final version of the code will work best with all the factors
to consider. 

-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to