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 escribir
resultado = [] 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