title: How to recursively replace character in keys of a nested dictionary?
body: <p>I'm trying to create a generic function that replaces dots in keys of a nested dictionary. I have a non-generic function that goes 3 levels deep, but there must be a way to do this generic. Any help is appreciated! My code so far:</p>
  
  <pre><code>output = {'key1': {'key2': 'value2', 'key3': {'key4 with a .': 'value4', 'key5 with a .': 'value5'}}} 
  
  def print_dict(d):
      new = {}
      for key,value in d.items():
          new[key.replace(".", "-")] = {}
          if isinstance(value, dict):
              for key2, value2 in value.items():
                  new[key][key2] = {}
                  if isinstance(value2, dict):
                      for key3, value3 in value2.items():
                          new[key][key2][key3.replace(".", "-")] = value3
                  else:
                      new[key][key2.replace(".", "-")] = value2
          else:
              new[key] = value
      return new
  
  print print_dict(output)
  </code></pre>
  
  <p><strong>UPDATE: to answer my own question, I made a solution using json object_hooks:</strong></p>
  
  <pre><code>import json
  
  def remove_dots(obj):
      for key in obj.keys():
          new_key = key.replace(".","-")
          if new_key != key:
              obj[new_key] = obj[key]
              del obj[key]
      return obj
  
  output = {'key1': {'key2': 'value2', 'key3': {'key4 with a .': 'value4', 'key5 with a .': 'value5'}}}
  new_json = json.loads(json.dumps(output), object_hook=remove_dots) 
  
  print new_json
  </code></pre>