Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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/8/api/5.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 API返回数据字典。但是,Can';是否在一个字典中保存分页结果?_Python_Api - Fatal编程技术网

Python API返回数据字典。但是,Can';是否在一个字典中保存分页结果?

Python API返回数据字典。但是,Can';是否在一个字典中保存分页结果?,python,api,Python,Api,我使用Python“requests”包从API获取数据。API以json格式返回数据,我认为Python将其视为字典。我使用API的offset参数来获取不同的结果,因此在范围(0,300,100)内的offset的:代码在下面的示例中 我应该得到300个结果,并将它们作为字典保存到X。然后,我尝试使用dict.update(x)来追加/更新dict,这样我就得到了一个包含所有300个结果的字典。然而,我总是以一个只有100个结果的口述结束。我认为我使用的.update有问题 dict = {

我使用Python“requests”包从API获取数据。API以json格式返回数据,我认为Python将其视为字典。我使用API的offset参数来获取不同的结果,因此在范围(0,300,100)内的offset的
代码在下面的示例中

我应该得到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)

关于我做错了什么或更好的方法有什么建议吗?

像这样编写自己的词典更新:

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 = {}
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]

新的dict将根据需要进行更新。

您可以使用
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]})
[1]中的
:从集合导入defaultdict
在[2]中:results=[{'a':1,'b':2},{'a':2,'b':4,'c':5}]
在[3]中:d=defaultdict(列表)
在[4]中:对于结果中的结果:
…:对于结果中的k,v.items():
…:d[k].附加(v)
在[5]中:打印(d)
defaultdict(,{'a':[1,2],'b':[2,4],'c':[5]})

您可以使用
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]})
[1]中的
:从集合导入defaultdict
在[2]中:results=[{'a':1,'b':2},{'a':2,'b':4,'c':5}]
在[3]中:d=defaultdict(列表)
在[4]中:对于结果中的结果:
…:对于结果中的k,v.items():
…:d[k].附加(v)
在[5]中:打印(d)
defaultdict(,{'a':[1,2],'b':[2,4],'c':[5]})

看起来键发生了冲突,在这种情况下,值被替换。因此,如果你每次获得一本
{0:foo',1:bar'}
,你最终得到的确实是同一本词典。我也这么认为。字典是否有类似于
append
的功能?但是您正在更新字典,问题是键可能是相同的。在字典中,一个键最多出现一次,因此它“覆盖”了值。明白了。钥匙是一样的。我理解原因。更新现在导致了问题。当对来自API的结果进行分页时,有没有关于如何解决这个问题的建议?看起来键是冲突的,在这种情况下,值被替换了。因此,如果你每次获得一本
{0:foo',1:bar'}
,你最终得到的确实是同一本词典。我也这么认为。字典是否有类似于
append
的功能?但是您正在更新字典,问题是键可能是相同的。在字典中,一个键最多出现一次,因此它“覆盖”了值。明白了。钥匙是一样的。我理解原因。更新现在导致了问题。当从API分页结果时,有没有关于如何解决这个问题的建议?