beoliver
beoliver

Reputation: 5769

reducing with a list comprehension in python

Is there a better way of writing the following for loop?

my_list = []
for key in my_set_of_keys:
    for val1,val2 in my_dict[key]:
        my_list.append((key,val2,val1))

My attempts are perhaps ... a little rambling ...

my_list = list(chain.from_iterable(map(
    lambda key: [(key,val2,val1) for (val1,val2) in my_dict[key]],
    my_set_of_keys)))

my_list = reduce(lambda x,y: x+y,(map(
    lambda key: [(key,val2,val1) for (val1,val2) in my_dict[key]],
    my_set_of_keys)))

my_list = reduce(list.__add__, (map(
    lambda key: [(key,val2,val1) for (val1,val2) in my_dict[key]],
    my_set_of_keys)))

my_dict looks like this:

'keyA' : { ('foo',1), ('bar',2), ('baz',3) }
'keyB' : { ... }

my_set_of_keys:

{ 'keyA', 'keyC', ... } 

Upvotes: 2

Views: 840

Answers (1)

Tadeck
Tadeck

Reputation: 137460

This may work for you:

my_list = [(key, v2, v1) for key in my_set_of_keys for v1, v2 in my_dict[key]]

Upvotes: 5

Related Questions