Question

I'm looking for a more pythonic 2.4 way of doing the following:

for (keys, values) in my_dict.iteritems():
    fmt_str = '%s, %s' % (keys[0], keys[1])
    for value in values:
        fmt_str = '%s, %s, %s' % (fmt_str, value[0], value[1])
    print fmt_str

Note: my_dict is composed of tuples for the key and from list of tuple for value.

Was it helpful?

Solution

How about:

from itertools import chain

for keys, values in my_dict.iteritems():
    fmt_str = ', '.join(map(str, chain(keys, *values)))
    print fmt_str

If all values in keys and values are strings already, then you can remove the map(str, ...) call:

for keys, values in my_dict.iteritems():
    fmt_str = ', '.join(chain(keys, *values))
    print fmt_str

OTHER TIPS

I would use

for (keys, values) in my_dict.iteritems():
    pairs = [keys] + list(values)
    print ', '.join(['%s, %s' % (pair[0], pair[1]) for pair in pairs])

if I'm really bound to Python 2.4 (AFAIR there were list comprehensions at that time, but no generator expressions).

In later versions, I would indeed use a generator expression and do

print ', '.join('%s, %s' % (pair[0], pair[1]) for pair in pairs)

or even

print ', '.join('%s, %s' % (pair[0], pair[1]) for pair in itertools.chain([keys], values))
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top