Pregunta ¿Cómo convertir un diccionario a cadena de consulta en Python?


Después de usar cgi.parse_qs(), ¿cómo convertir el resultado (diccionario) a la cadena de consulta? Buscando algo similar a urllib.urlencode().


73
2017-10-18 03:10


origen


Respuestas:


De los documentos:

urllib.urlencode(query[, doseq]
      Convertir un objeto de mapeo o una secuencia de tuplas de dos elementos a una cadena "porcentual-codificada" ... una serie de key=value pares separados por '&' caracteres...

UN dict es un mapeo


121
2017-10-18 03:13



En python3, ligeramente diferente:

from urllib.parse import urlencode
urlencode({'pram1': 'foo', 'param2': 'bar'})

salida: 'pram1=foo&param2=bar'

para la compatibilidad de python2 y python3, intente esto:

try:
    #python2
    from urllib import urlencode
except ImportError:
    #python3
    from urllib.parse import urlencode

36
2018-01-29 04:13



Estás buscando algo exactamente me gusta urllib.urlencode()!

Sin embargo, cuando llamas parse_qs() (distinta de parse_qsl()), las claves del diccionario son los nombres únicos de las variables de consulta y los valores son listas de valores para cada nombre

Para pasar esta información a urllib.urlencode(), debe "aplanar" estas listas. Aquí es cómo puedes hacerlo con una lista de comprensión de tuplas:

query_pairs = [(k,v) for k,vlist in d.iteritems() for v in vlist]
urllib.urlencode(query_pairs)

4
2017-10-18 04:46



Tal vez estás buscando algo como esto:

def dictToQuery(d):
  query = ''
  for key in d.keys():
    query += str(key) + '=' + str(d[key]) + "&"
  return query

Toma un diccionario y lo convierte en una cadena de consulta, al igual que urlencode. Agregará un "y" final a la cadena de consulta, pero return query[:-1] corrige eso, si es un problema.


-1
2017-10-18 04:12