def __add__(self, other):
        """
        Merge (+).
        
        The merge operation is similar to a union except that data is
        never overwritten. If three dictionaries with the same set of
        keys are merged, the resulting dictionary's values will be
        three-element lists.
        
        If you want destructive behavior, use the union (|) operator
        instead, since it pays no consideration to duplicate keys.
        """
        result = dict(self.data)
        
        for key in other.keys():
            if result.has_key(key):
                if hasattr(result[key], 'append'):
                    result[key].append(other[key])
                else:
                    result[key] = list([result[key], other[key]])
            else:
                result[key] = other[key]
                
        return result

        Merge (+).
        
        The merge operation is similar to a union except that data is
        never overwritten. If three dictionaries with the same set of
        keys are merged, the resulting dictionary's values will be
        three-element lists.
        
        If you want destructive behavior, use the union (|) operator
        instead, since it pays no consideration to duplicate keys.
        
recipes/Python/161403_Functional_dictionary_list_types/recipe-161403.py