@staticmethod
def _merge_todo(todo):
    """
        Merge different todo lists avoiding repeated aggregations or functions for
        the same column.

        :param todo: List of dictionaries, mapping a column to an aggregation or lambda to compute on that column.
        :type todo: list
        :return: Dictionary mapping a column to a list of aggregations and lambdas to compute on that, no repetitions.
        :rtype: dict
        """
    res = dict()
    for d in todo:
        for k, v in d.items():
            if k not in res:
                res[k] = []
            res[k].extend(v)
    for col in res:
        names = set()
        res[col] = list(set(res[col]))
        tmp = []
        for item in res[col]:
            if hasattr(item, '__call__') and hasattr(item, '__name__'):
                if item.__name__ not in names:
                    names.add(item.__name__)
                    tmp.append(item)
            else:
                tmp.append(item)
        res[col] = tmp
    return res
