Dicionário Python para parâmetros de URL


124

Estou tentando converter um dicionário Python em uma seqüência de caracteres para uso como parâmetros de URL. Estou certo de que existe uma maneira melhor e mais pitônica de fazer isso. O que é isso?

x = ""
for key, val in {'a':'A', 'b':'B'}.items():
    x += "%s=%s&" %(key,val)
x = x[:-1]

Respostas:


252

Use urllib.urlencode(). Ele pega um dicionário de pares de valores-chave e o converte em um formato adequado para um URL (por exemplo, key1=val1&key2=val2).

Se você estiver usando Python3, use urllib.parse.urlencode()

Se você deseja criar um URL com parâmetros repetitivos, como: p=1&p=2&p=3você tem duas opções:

>>> import urllib
>>> a = (('p',1),('p',2), ('p', 3))
>>> urllib.urlencode(a)
'p=1&p=2&p=3'

ou se você deseja criar um URL com parâmetros repetitivos:

>>> urllib.urlencode({'p': [1, 2, 3]}, doseq=True)
'p=1&p=2&p=3'

4
se você deseja criar um URL com parâmetros repetitivos, por exemplo:? p = 1 & p = 2 & p = 3, então a = (('p', 1), ('p', 2), ('p', 3)); urllib.urlencode (a) o resultado é 'p = 1 & p = 2 & p = 3'
panchicore

6
Outra maneira de obter parâmetros repetitivos: urllib.urlencode ({'p': [1, 2, 3]}, doseq = True) resultando em 'p = 1 & p = 2 & p = 3'.
mbaechtold

Se você se perguntar o que doeseqé isso : "Se algum valor no argumento de consulta for sequências e doseq for verdadeira, cada elemento da sequência será convertido em um parâmetro separado."
Martin Thoma

2

Use a biblioteca de manipulação de URL Python de terceiros furl :

f = furl.furl('')
f.args = {'a':'A', 'b':'B'}
print(f.url) # prints ... '?a=A&b=B'

Se você deseja parâmetros repetitivos, pode fazer o seguinte:

f = furl.furl('')
f.args = [('a', 'A'), ('b', 'B'),('b', 'B2')]
print(f.url) # prints ... '?a=A&b=B&b=B2'

Onde eu fico peludo? Parece não ser uma biblioteca padrão
AMADANON Inc. 27/03

1
pip install furlA sua não é uma parte da biblioteca padrão
Mayank Jaiswal

-7

Isso me parece um pouco mais Pythonic e não usa outros módulos:

x = '&'.join(["{}={}".format(k, v) for k, v in {'a':'A', 'b':'B'}.items()])

8
Isso não codifica por cento os parâmetros corretamente. Isto irá criar resultados inesperados se os seus dados inclui ampersands, iguais, símbolos de hash, etc.
Jamie Cockburn
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.