Después de usar cgi.parse_qs()
, ¿cómo convertir el resultado (diccionario) a la cadena de consulta? Buscando algo similar a urllib.urlencode()
.¿Cómo convertir un diccionario a una cadena de consulta en Python?
Respuesta
De the docs:
urllib.urlencode
(query
[,doseq
])
Convierte un objeto de asignación de o una secuencia de tuplas de dos elementos para una cadena “por ciento codificado” ... una serie dekey=value
pares separados por'&'
caracteres ...
a dict
es un mapeo.
Esto es cierto, pero el 'dict' devuelto por' cgi.parse_qs() 'en realidad tiene' list's como sus "valores". Pasar estos directamente dará lugar a cadenas de consulta de aspecto muy extraño. – Johnsyweb
Como dicen los documentos, para eso se usa 'doseq'. –
Cierto. ¡Eso me enseñará a leer más que la primera oración! – Johnsyweb
Tal vez usted está buscando algo como esto:
def dictToQuery(d):
query = ''
for key in d.keys():
query += str(key) + '=' + str(d[key]) + "&"
return query
Se necesita un diccionario y convertirlo en una cadena de consulta, al igual que urlencode. Agregará un "& final" a la cadena de consulta, pero return query[:-1]
lo corrige, si es un problema.
¿Ya conociste 'str.join()'? ¿Qué tal 'urllib.quote_plus()'? –
@garbados Su solución debería funcionar en casos simples. Sin embargo, eche un vistazo a 'urlencode' en' urllib.py' (debe hacerlo en su instalación de Python) para ver por qué la creación de una cadena de consulta a veces no es tan simple como lo implica su respuesta (en particular, la necesidad de 'citar' ciertos caracteres que no son válidos en una URL). @ Ignacio también ha hecho referencia a dos funciones que limpiarían su implementación y la corregirían. –
Ah, de hecho. Perdón por la cruda implementación. Va a mostrar que debería ser más cuidadoso al responder preguntas que nunca me he enfrentado. – garbados
Usted está buscando algo exactamente como urllib.urlencode()
!
Sin embargo, cuando se llama parse_qs()
(distinta de parse_qsl()
), las claves del diccionario son los nombres de las variables de consulta única y los valores son listas de valores para cada nombre.
Para pasar esta información al urllib.urlencode()
, debe "aplanar" estas listas. He aquí cómo usted puede hacerlo con una lista comprehenshion de tuplas:
query_pairs = [(k,v) for k,vlist in d.iteritems() for v in vlist]
urllib.urlencode(query_pairs)
En python3, ligeramente diferente:
from urllib.parse import urlencode
urlencode({'pram1': 'foo', 'param2': 'bar'})
de salida: 'pram1=foo¶m2=bar'
para python2 y compatibilidad python3, intente esto:
try:
#python2
from urllib import urlencode
except ImportError:
#python3
from urllib.parse import urlencode
- 1. Convertir encabezados http (cadena) a un diccionario python
- 2. Una manera sencilla de convertir una cadena en un diccionario
- 3. Cómo convertir en el diccionario de cadena
- 4. Cómo convertir una cadena a utf-8 en Python
- 5. Python convertir diccionario en tupla
- 6. Python: ¿Podemos convertir una estructura de ctypes en un diccionario?
- 7. Cadena de diccionario en Python
- 8. Convertir un objeto de Python 'tipo' a una cadena
- 9. ¿Cómo puedo convertir una cadena de consulta de URL en una lista de tuplas usando Python?
- 10. cómo convertir Diccionario <dinámico, dinámico> a Diccionario <cadena, cadena> usando Colllection.ToDictionary()
- 11. Cómo convertir un HTMLElement a una cadena
- 12. python: ¿diccionario a cadena, formato personalizado? Sólo
- 13. Cómo convertir un int a una cadena?
- 14. ¿Cómo convertir un archivo en un diccionario?
- 15. ¿Cómo puedo convertir un diccionario de Python a una lista de tuplas?
- 16. Convertir cadena/caracteres a entero en python
- 17. Python MySQLdb: Los parámetros de consulta como un diccionario llamado
- 18. convertir una cadena de bytes en un int (python)
- 19. ¿Cómo puedo convertir una cadena en una lista en Python?
- 20. ¿Convertir cadena a objeto de clase Python?
- 21. Cómo agregar cadena de consulta a httpwebrequest
- 22. La mejor manera de convertir la cadena de consulta al diccionario en C#
- 23. Creación de un diccionario de una cadena
- 24. Diccionario de Python a Parámetros de URL
- 25. Python: convertir cadena a matriz de bytes
- 26. En python, ¿cómo convertir una cadena ascii hexadecimal a una cadena binaria interna sin procesar?
- 27. cómo convertir una cadena en un bool
- 28. convertir cadena a dict utilizando lista de comprensión en python
- 29. convertir una cadena a la lista en Python
- 30. Json Convertir a y desde cadena de consulta con jquery?
NB: ['cgi.parse_qs()' está en desuso. Use urlparse.parse_qs() en su lugar.] (Http://docs.python.org/library/cgi.html#cgi.parse_qs) – Johnsyweb
** Vea también: ** https://stackoverflow.com/questions/5607551/ how-to-urlencode-a-querystring-in-python – dreftymac