If I have a dictionary containing lists in one or more of its values:
data = { 'a':0, 'b':1, 'c':[0, 1, 2], 'pair':['one','two'] }
How can I get a list of dict tuples paired by pair
and iterating over c
, with all else remaining constant? E.g.
output = [ ({ 'a':0, 'b':1, 'c':0, 'pair':'one' }, { 'a':0, 'b':1, 'c':0, 'pair':'two' }), ({ 'a':0, 'b':1, 'c':1, 'pair':'one' }, ... ]
Advertisement
Answer
Well, this doesn’t feel especially elegant, but you might use a nested for loop or list comprehension:
output = [] for i in data['c']: output.append(tuple({'a': 0, 'b': 1, 'c': i, 'pair': p} for p in data))
or
output = [tuple({'a': 0, 'b': 1, 'c': i, 'pair': p} for p in data['pair']) for i in data['c']]
A cleaner solution might separate out the generation of the component dict into a function, like this:
def gen_output_dict(c, pair): return {'a': 0, 'b': 1, 'c': c, 'pair': pair} output = [] for i in data['c']: output.append(tuple(gen_output_dict(i, p) for p in data['pair']))