Your task is to write a function that takes two or more objects and returns a new object which combines all the input objects. 

All input object properties will have only numeric values. Objects are combined together so that the values of matching keys are added together.

An example:

```python
objA = { 'a': 10, 'b': 20, 'c': 30 }
objB = { 'a': 3, 'c': 6, 'd': 3 }
combine(objA, objB) # Returns { a: 13, b: 20, c: 36, d: 3 }
```

The combine function should be a good citizen, so should not mutate the input objects.

Source: codewars | Difficulty: EASY
Tags: Fundamentals

Data structures

Starter code: def combine(*args):
	

Solutions:
def combine(*bs):
	c = {}
	for b in bs:
		for (k, v) in list(b.items()):
			c[k] = v + c.get(k, 0)
	return c


from collections import Counter

def combine(*args):
	return sum((Counter(a) for a in args), Counter())


def combine(*dictionaries):
	result = {}
	for dict in dictionaries:
		for (key, value) in list(dict.items()):
			result[key] = value + result.get(key, 0)
	return result


from collections import defaultdict

def combine(*dicts):
	ret = defaultdict(int)
	for d in dicts:
		for (k, v) in d.items():
			ret[k] += v
	return dict(ret)


from collections import Counter

def combine(*args):
	return sum(map(Counter, args), Counter())


def combine(*args):
	rez = {}
	for i in args:
		for (k, v) in i.items():
			rez[k] = rez.get(k, 0) + v
	return rez


def combine(*args):
	result = {}
	for obj in args:
		for (key, value) in obj.items():
			if not key in result:
				result[key] = 0
			result[key] += value
	return result


def combine(*args):
	ret = {}
	for arg in args:
		for (k, v) in arg.items():
			ret.setdefault(k, 0)
			ret[k] = ret[k] + v
	return ret


def combine(*args):
	keys = set([y for x in args for y in list(x.keys())])
	return {k: sum([a.get(k, 0) for a in args]) for k in keys}