如何在python中对多值键进行URL编码?

如何在python中对多值键进行URL编码?,python,urlencode,Python,Urlencode,我想用python实现这一点: curl 'http://localhost:8983/solr/samos/select?rows=0&q=*:*&fq=time:\[2012-08-01T00:00:00Z%20TO%202013-10-01T00:00:00Z\]&fq=loc:\[15,-45%20TO%2030,-30\]' 因此,我制作了一本词典并尝试了以下请求: webpage = 'http://localhost:8983/solr/samos/sel

我想用python实现这一点:

curl 'http://localhost:8983/solr/samos/select?rows=0&q=*:*&fq=time:\[2012-08-01T00:00:00Z%20TO%202013-10-01T00:00:00Z\]&fq=loc:\[15,-45%20TO%2030,-30\]'
因此,我制作了一本词典并尝试了以下请求:

webpage = 'http://localhost:8983/solr/samos/select'
query_args = {
    'q' : '*:*', \
    'fq' : ['time:[2012-08-01T00:00:00Z TO 2013-10-01T00:00:00Z]', \
    'fq' : 'loc:[15,-45 TO 30,-30]', \
    'rows' : '0' \
}
query = urllib.urlencode(query_args)
req = urllib2.Request(webpage, query)
res = urllib2.urlopen(req)
这里的问题是,我的'fq'键有两个值,因此只处理一个参数。解决这个问题最简单的方法是什么?

将接受生成2元组的序列

将映射对象或两个元素元组的序列转换为“百分比编码”字符串

e、 g

演示:


请注意,如果出于某种原因,查询参数的顺序很重要,您也可以使用此选项。

谢谢!这正是我想要的。
query_args = [
    ('q', '*:*'),
    ('fq', 'time:[2012-08-01T00:00:00Z TO 2013-10-01T00:00:00Z]'),
    ('fq', 'loc:[15,-45 TO 30,-30]'),
    ('rows', '0'),
]
>>> urllib.urlencode(query_args)
'q=%2A%3A%2A&fq=time%3A%5B2012-08-01T00%3A00%3A00Z+TO+2013-10-01T00%3A00%3A00Z%5D&fq=loc%3A%5B15%2C-45+TO+30%2C-30%5D&rows=0'