Python HTTP请求为参数中的一个键分配多个值

Python HTTP请求为参数中的一个键分配多个值,python,json,http,python-requests,Python,Json,Http,Python Requests,我正在使用python的请求库从API执行“获取”。以下是我的部分代码: payload = { 'topicIds':'128487', 'topicIds':'128485', 'topicIds': '242793', 'timePeriod':'10d', } r= requests.get(url, params=payload, headers=headers) 根据API文档,我们可以为一个请求分配多个topic

我正在使用python的请求库从API执行“获取”。以下是我的部分代码:

payload = { 'topicIds':'128487',
            'topicIds':'128485', 
        'topicIds': '242793',
            'timePeriod':'10d', }

r= requests.get(url, params=payload, headers=headers)
根据API文档,我们可以为一个请求分配多个topicId,如下所示:
topicId=123&topicId=246

当我尝试将topicIds值设置为如下列表时:

payload = { 'topicIds':['128487' , '242793'],
我得到一个错误:
{u'error:u'topicIds:有2个术语,应该在0和1'}

但是,当我运行代码时,我只从最后一个topicIds=>“topicIds”获取数据:“242793” 我把字典写错了吗


谢谢,

是的,您的有效负载写错了,只要试着打印这张纸,您就会得到

{'topicIds': '242793', 'timePeriod': '10d'}
这些键在字典中被覆盖

我认为最好是用所有的主题词组成一个字符串,诸如此类的东西

'<separator>'.join([<list of topicIds>])
加入([]) 试试:


这是在查询字符串中定义数组的最常用方法。

这也适用

params = {'topicIds': ['128487', '128485', '242793'],
         'timePeriod':'10d', }

r= requests.get(url, params=params)

你不做TopICID列表有什么原因吗?是的,它不起作用(请参见编辑)这如何适应负载变量?这只是我复制粘贴测试代码时的一个错误。我现在已经编辑过了。需要注意的是topicIds后面的括号。这是值得一试的,如果不知道API规范,我们真的无法再提供帮助了。@fasouto出于某种奇怪的原因编辑了我的答案,根本没有进行测试,所以我将其回滚。结果url不相同,带括号和不带括号。带括号的results in-不带括号的results in-括号是在查询和post参数中定义数组的最常用方法(例如,PHP使用这种语法将GET params解析为数组)。@scandinavian_uu我测试了它,但它对我不起作用,这就是我编辑它的原因。我看到了topicIds=[1,2]和topicIds=1&topicIds=2,但从来没有见过topicIds[]=[1,2],所以我觉得这是个打字错误。我不知道什么是最好的方式,我现在没有时间调查,所以对给您带来的不便表示歉意
params = {'topicIds': ['128487', '128485', '242793'],
         'timePeriod':'10d', }

r= requests.get(url, params=params)