Python API返回数据字典。但是,Can';是否在一个字典中保存分页结果?
我使用Python“requests”包从API获取数据。API以json格式返回数据,我认为Python将其视为字典。我使用API的offset参数来获取不同的结果,因此在范围(0,300,100)内的offset的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 = {
:
代码在下面的示例中
我应该得到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分页结果时,有没有关于如何解决这个问题的建议?