API返回数据字典。但是,无法将分页结果保存在单个词典中吗?

时间:2018-10-10 12:21:42

标签: python api

我正在使用Python“请求”包从API中获取数据。该API以json格式返回数据,我相信Python会将其视为字典。我正在使用API​​的offset参数来提取不同的结果,因此在下面的示例中使用了for offset in range(0, 300, 100):代码。

我应该得到300个结果,并将它们另存为X的字典。然后,我尝试使用dict.update(x)附加/更新dict,以便获得包含所有300个结果的字典。但是,我一直以只有100个结果的字典结尾。我认为使用.update出了点问题。

dict = {} #Initialize dict as an empty dictionary

for offset in range(0, 300, 100):
r = requests.get(url, headers=headers, params={'offset':str(offset)})
x = r.json()
dict.update(x)

关于我正在做的错误或更好的方法的任何建议吗?

2 个答案:

答案 0 :(得分:1)

这样编写自己的字典更新:

new_dict = {}
def own_update(dict):
    for key,val in dict.iteritems():
        if key in new_dict:
           new_dict[key] = new_dict[key].append(val)
        else:
           new_dict[key] = [value]

new_dict将根据需要进行更新。

答案 1 :(得分:1)

您可以使用defaultdict

In [1]: from collections import defaultdict                                                                                                                                                                                                   

In [2]: results = [{'a': 1, 'b': 2}, {'a': 2, 'b': 4, 'c': 5}]                                                                                                                                                                                

In [3]: d=defaultdict(list)                                                                                                                                                                                                                   

In [4]: for result in results: 
   ...:     for k, v in result.items(): 
   ...:         d[k].append(v)                                                                                                                                                                                                                

In [5]: print(d)                                                                                                                                                                                                                              
defaultdict(<class 'list'>, {'a': [1, 2], 'b': [2, 4], 'c': [5]})