text: '''
  collection of recursive functions to help fetch nested keys
  in highly nested dictionaries and lists
  '''
  from typing import Dict, List
  
  def recursive_get(blob: Dict, key: str) -> List:
      value_list: List = []
  
      if not isinstance(blob, dict):
          raise TypeError(f'The obj: {blob} is not a dict. You must pass a dictionary object.')
  
      if key in blob:
          value_list.append(blob.get(key, None))
  
      for k, v in blob.items():
          if isinstance(v, dict):
              value_list.extend(recursive_get(v, key))
          elif isinstance(v, list):
              for item in v:
                  if isinstance(item, dict):
                      value_list.extend(recursive_get(item, key))
  
      return value_list
  
  def nested_list(list_obj: List, key: str) -> List:
      value_list = []
  
      if not isinstance(list_obj, list):
          raise TypeError(f'The obj: {blob} is not a list. You must pass a list object.')
  
      for item in list_obj:
          if isinstance(item, list):
              value_list.extend(nested_list(item, key))
          elif isinstance(item, dict):
              value_list.append(item.get(key, None))