docs: def update_existing(dict1, dict2, copy=False, assert_exists=False,
                      iswarning=False, alias_dict=None):
      r"""
      updates vals in dict1 using vals from dict2 only if the
      key is already in dict1.
  
      Args:
          dict1 (dict):
          dict2 (dict):
          copy (bool): if true modifies dictionary in place (default = False)
          assert_exists (bool): if True throws error if new key specified (default = False)
          alias_dict (dict): dictionary of alias keys for dict2 (default = None)
  
      Returns:
          dict - updated dictionary
  
      CommandLine:
          python -m utool.util_dict --test-update_existing
  
      Example:
          >>> # ENABLE_DOCTEST
          >>> from utool.util_dict import *  # NOQA
          >>> dict1 = {'a': 1, 'b': 2, 'c': 3}
          >>> dict2 = {'a': 2, 'd': 3}
          >>> dict1_ = update_existing(dict1, dict2)
          >>> assert 'd' not in dict1
          >>> assert dict1['a'] == 2
          >>> assert dict1_ is dict1
      """
      if assert_exists:
          try:
              assert_keys_are_subset(dict1, dict2)
          except AssertionError as ex:
              from utool import util_dbg
              util_dbg.printex(ex, iswarning=iswarning, N=1)
              if not iswarning:
                  raise
      if copy:
          dict1 = dict(dict1)
      if alias_dict is None:
          alias_dict = {}
      for key, val in six.iteritems(dict2):
          key = alias_dict.get(key, key)
          if key in dict1:
              dict1[key] = val
      return dict1