Using namedtuples field names for column indices in a list of lists

Steven D'Aprano steve+comp.lang.python at
Tue Jan 10 21:18:49 EST 2017

On Tuesday 10 January 2017 18:14, Deborah Swanson wrote:

> I'm guessing that you (and those who
> see things like you do) might not be used to working with quick learners
> who make mistakes at first but catch up with them real fast, or you're
> very judgemental about people who make mistakes, period. I certainly
> don't care if you want to judge me, you're entitled to your opinion.

Be fair. We're not mind-readers, and we're trying to help you, not attack you.

It is true that we're often extremely pedantic. Sometimes annoyingly so, but on 
the other hand precision is important, especially in technical fields. There's 
a *huge* difference between a MTA and a MUA, even though they differ only by 
one letter and both are related to email.

One of the techs I work with has the same habit of correcting me, and when I'm 
invariably forced to agree that he is technical correct, he replies "technical 
correctness is the best kind of correctness". Annoying as it is to be on the 
receiving end, he is right: at least half the time I learn something from his 
pedantry. (The other half of the time, its a difference that makes no 

What are we supposed to do when somebody asks a question based on an obvious 
mistake? Assume that they're a quick learner who has probably already worked 
out their mistake and doesn't need an answer? That would certainly make our 
life easier: we can just ignore everybody's questions.

Sometimes people make errors of terminology that doesn't affect the semantics 
of what they're asking:

    "I have an array [1, 2, 3, 4] and I want to ..."

It's very likely that they have a list and they're merely using a term they're 
familiar with from another language, rather than the array module.

But what are we supposed to make of mistakes that *do* affect the semantics of 
the question:

    "I have a dict of ints {1, 2, 3, 4} and want to sort the values by 
    key so that I get [4, 2, 3, 1], how do I do that?"

How can we answer that without correcting their misuse of terminology and 
asking for clarification of what data structure they *actually* have?

We get questions like this very frequently. How would you answer it?


    "I have a list l = namedtuple('l', 'field1 field2') and can't 
    extract fields by index, l[0] doesn't work..."

Of course it doesn't work. How would you respond to that if you were in our 

- ignore the question because the poster is ever so smart and will have
  worked it out by now?

- point out that l is not a list, or even a tuple, and of course l[0] 
  doesn't work because l is actually a class?

Its easy to criticise us for answering the questions you ask instead of the 
questions you intended, but we're not mind-readers. We don't know what you're 
thinking, we only know what you communicate to us. Telling us off for answering 
your questions is hardly likely to encourage us to answer them in the future.

"Ever since I learned about confirmation bias, I've been seeing 
it everywhere." - Jon Ronson

More information about the Python-list mailing list