code: def walk(fn, obj, *args, **kwargs):
      
      if type(obj) in [list, tuple]:
          return list(walk(fn, o, *args) for o in obj)
      if type(obj) is dict:
          return dict((walk(fn, k, *args), walk(fn, v, *args)) for k, v in
                      obj.items())
      return fn(obj, *args, **kwargs)
docs: Recursively walk an object graph applying `fn`/`args` to objects.