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