Python字典到URL参数


124

我正在尝试将Python字典转换为用作URL参数的字符串。我敢肯定,有一种更好的,更Python化的方法可以做到这一点。它是什么?

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

Answers:


251

使用urllib.urlencode()。它采用键值对字典,然后将其转换为适合网址的形式(例如,key1=val1&key2=val2)。

如果您使用的是Python3,请使用 urllib.parse.urlencode()

如果要使用重复的参数创建URL,例如:p=1&p=2&p=3您有两个选择:

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

或者,如果您想使用重复的参数创建网址:

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

4
如果您要使用重复的参数创建网址,例如:?p = 1&p = 2&p = 3,则a =(('p',1),('p',2),('p',3)); urllib.urlencode(a)该结果为'P = 1&P = 2&P = 3'
panchicore

6
另一种获取重复参数的方法:urllib.urlencode({'p':[1、2、3]},doseq = True)得出'p = 1&p = 2&p = 3'。
mbaechtold 2014年

如果您想知道doeseq是什么意思:“如果查询arg中的任何值都是序列,而doseq为true,则每个序列元素都将转换为单独的参数。”
马丁·托马

2

使用第三方Python URL操作库furl

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

如果需要重复的参数,可以执行以下操作:

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

我在哪里弄皮?它似乎不是标准库
AMADANON Inc.

1
pip install furl它不是标准库的一部分
Mayank Jaiswal

-7

在我看来,这似乎更像Pythonic,并且不使用任何其他模块:

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

8
这不会正确编码参数。如果您的数据包括&符号,等号,哈希符号等,这将导致意外的结果
杰米·科伯恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.