code: def generate_querystring(params):
      if not params:
          return None
      parts = []
      for param, value in sorted(params.items()):
          if not isinstance(value, dict):
              parts.append(urlencode({param: value}))
          else:
              for key, sub_value in sorted(value.items()):
                  composed = '{param}[{key}]'.format(param=param, key=key)
                  parts.append(urlencode({composed: sub_value}))
      if parts:
          return '&'.join(parts)