Pick a column for each row by column-header name
The downside of all the functions, except pick0, is that the caller needs to know all the columns and their order. pick0 is even worse as it is not reusable.

I would rather implement something similar to csv.DictReader that would give me each row as a dict, or perhaps as a namedtuple

If the usage is as simple as in the given example, one could also simply do this:

key_index = headers.index(key)
for row in ((5, 6), ('f', 'g'), (1, 8)):
    print row[key_index]


Other comments:


Using locals() in pick0 is dubious. A caller trying to pick k or r would get unexpected results.
lambda is for creating nameless functions. Use def when you want to assign a name.