Python 如何在查询字符串中创建关联数组
我正在使用请求库和python 2.7 执行此操作时:Python 如何在查询字符串中创建关联数组,python,python-requests,Python,Python Requests,我正在使用请求库和python 2.7 执行此操作时: import requests uri_params = { u'email': u'myEmail@domain.com', u'id_user': 15, u'user_var': { u'var1': u'val1', u'var2': u'val2', } } r = requests.get('http://google.com/', params=uri_pa
import requests
uri_params = {
u'email': u'myEmail@domain.com',
u'id_user': 15,
u'user_var': {
u'var1': u'val1',
u'var2': u'val2',
}
}
r = requests.get('http://google.com/', params=uri_params)
print r.url
因此,它给了我:
而不是
(=user_var[var1]=val1和user_var[var2]=val2)
您知道是否请求lib作为处理此问题的方法吗
编辑:
我花了几分钟才明白如何使用Martijn Pieters的代码。
下面是我这样的python新手的最终代码:
import requests
import urllib
def nested_object(name, mapping):
return [(u'{}[{}]'.format(name, key), value) for key, value in mapping.iteritems()]
uri_params = [
(u'email', u'myEmail@domain.com'),
(u'id_user', 15),
]
uri_params.extend(nested_object(u'user_var', {u'var1': u'val1', u'var2': u'val2'}))
encoded = urllib.urlencode(uri_params)
r = requests.get('http://google.com/', params=encoded)
print r.url
否,
请求
库没有处理该问题的方法
用于GET和POST请求的application/x-www-form-urlencoded
编码标准只允许一个级别的键值对,没有嵌套值的标准。相反,各种框架都发明了自己的框架来处理这个问题。您看到的是多种变体中的一种
您看到的输出是由函数创建的,该函数通过多次重复键来处理序列;嵌套字典被视为一个序列,因此只有键被序列化。通常,这将用于值列表,并模仿浏览器在序列化具有相同名称的多个表单字段时所做的操作
您必须自己对嵌套字典进行编码:
def nested_object(name, mapping):
return [(u'{}[{}]'.format(name, key), value) for key, value in mapping.iteritems()]
将返回键值元组序列。将其余URL参数保持为相同格式:
uri_params = [
(u'email', u'myEmail@domain.com'),
(u'id_user', 15),
]
uri_params.extend(nested_object(u'user_var', {u'var1': u'val1', u'var2': u'val2'}))