def urldecode(opt): return {unquote(k): unquote(v) for k, v in [e.split('=', 1) for e in opt.split("&") if '=' in e]}(Usa o unquote de urllib)
Por exemplo:
>>> from urllib import unquote
>>> def urldecode(opt): return {unquote(k): unquote(v) for k, v in [e.split('=', 1) for e in opt.split("&") if '=' in e]}
...
>>> urldecode("continue=https%3A%2F%2Fgroups.google.com%2Fd%2Foverview&service=groups2&passive=true")
{'passive': 'true', 'continue': 'https://groups.google.com/d/overview', 'service': 'groups2'}
>>>Como funciona?
De dentro cara fora, `opt.split("&")` divide os pares de parámetros.
E a partir de aquí todo o truco está nas list comprehensions que permite iterar sobre estructuras de datos e operar sobre os elementos, por exemplo neste caso
[e.split('=', 1) for e in opt.split("&") if '=' in e]que sería buscar todos os elementos do resultado anterior que conteñan '=' e dividilos por ese carácter, sería coma escribirresultado = []
for e in opt.split("&"):
if '=' in e:
resultado.append(e.split('=', 1))Por último quedaría tomar a lista de pares separados por '=', facer `unquote()` dos elementos e introducilos como chave e valor nun diccionario, os dicccionarios tamén teñen o equivalente os list comprehensions, entón faríamos:
{unquote(k): unquote(v) for k, v in result}Isto equivalería a
params = {}
for k, v in result:
params[unquote(k)] = unquote(v)
No hay comentarios:
Publicar un comentario