class_docstr: A collector to collect the results of other Collectors
  
  For example:
  
      We have 2 collector, which named A and B.
      A can collect {"prediction": pd.Series} and B can collect {"IC": {"Xgboost": pd.Series, "LSTM": pd.Series}}.
      Then after this class's collect, we can collect {"A_prediction": pd.Series, "B_IC": {"Xgboost": pd.Series, "LSTM": pd.Series}}
  
      ...
class_docstr_tok: ["A","collector","to","collect","the","results","of","other","Collectors","For","example",":","We","have","2","collector",",","which","named","A","and","B",".","A","can","collect","{","``","prediction","''",":","pd.Series","}","and","B","can","collect","{","``","IC","''",":","{","``","Xgboost","''",":","pd.Series",",","``","LSTM","''",":","pd.Series","}","}",".","Then","after","this","class","'s","collect",",","we","can","collect","{","``","A_prediction","''",":","pd.Series",",","``","B_IC","''",":","{","``","Xgboost","''",":","pd.Series",",","``","LSTM","''",":","pd.Series","}","}","..."]
docstr: Init MergeCollector.
  
  Args:
      collector_dict (Dict[str,Collector]): the dict like {collector_key, Collector}
      process_list (List[Callable]): the list of processors or the instance of processor to process dict.
      merge_func (Callable): a method to generate outermost key. The given params are ``collector_key`` from collector_dict and ``key`` from every collector after collecting.
          None for using tuple to connect them, such as "ABC"+("a","b") -> ("ABC", ("a","b")).
docstr_tok: ["Init","MergeCollector",".","Args",":","collector_dict","(","Dict","[","str",",","Collector","]",")",":","the","dict","like","{","collector_key",",","Collector","}","process_list","(","List","[","Callable","]",")",":","the","list","of","processors","or","the","instance","of","processor","to","process","dict",".","merge_func","(","Callable",")",":","a","method","to","generate","outermost","key",".","The","given","params","are","``","collector_key","``","from","collector_dict","and","``","key","``","from","every","collector","after","collecting",".","None","for","using","tuple","to","connect","them",",","such","as","``","ABC","''","+","(","``","a","''",",","''","b","''",")","-",">","(","``","ABC","''",",","(","``","a","''",",","''","b","''",")",")","."]
code: def __init__(
      self,
      collector_dict: Dict[str, Collector],
      process_list: List[Callable] = [],
      merge_func=None,
  ):
      """
      Init MergeCollector.
  
      Args:
          collector_dict (Dict[str,Collector]): the dict like {collector_key, Collector}
          process_list (List[Callable]): the list of processors or the instance of processor to process dict.
          merge_func (Callable): a method to generate outermost key. The given params are ``collector_key`` from collector_dict and ``key`` from every collector after collecting.
              None for using tuple to connect them, such as "ABC"+("a","b") -> ("ABC", ("a","b")).
      """
      super().__init__(process_list=process_list)
      self.collector_dict = collector_dict
      self.merge_func = merge_func
  
imports: from collections import defaultdict
  from qlib.log import TimeInspector
  from typing import Callable, Dict, Iterable, List
  from qlib.log import get_module_logger
  from qlib.utils.serial import Serializable
  from qlib.utils.exceptions import LoadObjectError
  from qlib.workflow import R
  from qlib.workflow.exp import Experiment
  from qlib.workflow.recorder import Recorder
label_desc: Use image node_id 1 to create a new MergeCollector object from inherited base classes: Collector with example: obj = MergeCollector(collector_dict, process_list, merge_func)