code: def todict(cls, parseresult, mode='parens', ns={}):
          
          grouped, kwargs = [], {}
          tokens = cls.collect_tokens(parseresult, mode)
          # Group tokens without '=' and append to last token containing '='
          for group in groupby(tokens, lambda el: '=' in el):
              (val, items) = group
              if val is True:
                  grouped += list(items)
              if val is False:
                  elements =list(items)
                  # Assume anything before ) or } can be joined with commas
                  # (e.g tuples with spaces in them)
                  joiner=',' if any(((')' in el) or ('}' in el))
                                    for el in elements) else ''
                  grouped[-1] += joiner + joiner.join(elements)
  
          for keyword in grouped:
              # Tuple ('a', 3) becomes (,'a',3) and '(,' is never valid
              # Same for some of the other joining errors corrected here
              for (fst,snd) in [('(,', '('), ('{,', '{'), ('=,','='),
                                (',:',':'), (':,', ':'), (',,', ','),
                                (',.', '.')]:
                  keyword = keyword.replace(fst, snd)
              try:
                  kwargs.update(eval('dict(%s)' % keyword,
                                     dict(cls.namespace, **ns)))
              except:
                  if cls.abort_on_eval_failure:
                      raise SyntaxError("Could not evaluate keyword: %r"
                                        % keyword)
                  msg = "Ignoring keyword pair that fails to evaluate: '%s'"
                  parsewarning.warning(msg % keyword)
  
          return kwargs
docs: Helper function to return dictionary given the parse results
          from a pyparsing.nestedExpr object (containing keywords).
  
          The ns is a dynamic namespace (typically the IPython Notebook
          namespace) used to update the class-level namespace.