I need to merge three dictionaries with array values into a single dict based on if they have same values inside the array. The dictionaries is like this:
data = {
'A1':['Cheese','Cupcake', 'Salad','Sandwich'],
'A2':['Cheese','Cupcake', 'Pasta','Pudding'],
'A3':['Pudding','Pasta', 'Salad','Sandwich']
}
Then, the output would be like this:
{
   'A1,A2':['Cheese','Cupcake']
   'A1,A3':['Salad', 'Sandwich']
   'A2,A3':['Pudding','Pasta']
}
I’ve tried this:
tmp = {}
for key, value in data.items():
  if value in tmp:
    tmp[value].append(key)
  else:
    tmp[value] = [ key ]
print(tmp)
But it only works if the values isn’t a list or array. Any solution?
Advertisement
Answer
Given you use case, you could use itertools.combinations and set intersection:
data = {
'A1':['Cheese','Cupcake', 'Salad','Sandwich'],
'A2':['Cheese','Cupcake', 'Pasta','Pudding'],
'A3':['Pudding','Pasta', 'Salad','Sandwich']
}
from itertools import combinations
out = {f'{a},{b}': list(set(data[a]).intersection(data[b]))
       for a,b in combinations(data, 2)}
output:
{'A1,A2': ['Cupcake', 'Cheese'],
 'A1,A3': ['Sandwich', 'Salad'],
 'A2,A3': ['Pasta', 'Pudding']}