A module-level function is a function which is defined at module level, that means it is not an instance method of a class, it's not nested within another function, and it is a "real" function with a name, not a lambda function.
So, to pickle your defaultdict, create it with module-level function instead of a lambda function:
def dd():
return defaultdict(int)
dict1 = defaultdict(dd) # dd is a module-level function
then you can pickle it
tmp = pickle.dumps(dict1) # no exception
new = pickle.loads(tmp)