Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在查询字符串中创建关联数组_Python_Python Requests - Fatal编程技术网

Python 如何在查询字符串中创建关联数组

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

我正在使用请求库和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_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'}))