code: def aget(dct, key):
      r
      key = iter(key)
      try:
          head = next(key)
      except StopIteration:
          return dct
  
      if isinstance(dct, list):
          try:
              idx = int(head)
          except ValueError:
              raise IndexNotIntegerError(
                  "non-integer index %r provided on a list."
                  % head)
          try:
              value = dct[idx]
          except IndexError:
              raise IndexOutOfRange(
                  "index %d is out of range (%d elements in list)."
                  % (idx, len(dct)))
      else:
          try:
              value = dct[head]
          except KeyError:
              ## Replace with a more informative KeyError
              raise MissingKeyError(
                  "missing key %r in dict."
                  % (head, ))
          except Exception:
              raise NonDictLikeTypeError(
                  "can't query subvalue %r of a leaf%s."
                  % (head,
                     (" (leaf value is %r)" % dct)
                     if len(repr(dct)) < 15 else ""))
      return aget(value, key)
docs: r"""Allow to get values deep in a dict with iterable keys
  
      Accessing leaf values is quite straightforward:
  
          >>> dct = {'a': {'x': 1, 'b': {'c': 2}}}
          >>> aget(dct, ('a', 'x'))
          1
          >>> aget(dct, ('a', 'b', 'c'))
          2
  
      If key is empty, it returns unchanged the ``dct`` value.
  
          >>> aget({'x': 1}, ())
          {'x': 1}