合并多个字典(来自json文件)



我有一个问题,我一直试图解决,但我还没有找到正确的方法。

我有大约60-70页的数据从api, json格式。我需要将它们转换为一个列表,并组合其中一个值。

数据格式如下:

{"success":true,otherData:0,neededData:[{moreData:0,data:1},{moreData:1,data:0}]}

就像我说的,我一次大约有60-70个。

我最后想要的是这样的一个列表:

[{moreData:0,data:1},{moreData:1,data:0}]

包含列表中的所有数据。

我怎样才能做到这一点?

如果您不断获得json字符串格式的响应在Python 3中。x伊什

import json
# global variable just for example
results = []
# assume you pass each successful request into this function
# @ param res : valid json string
def process_response(res):
global results
# loads returns a dict object
res_dict = json.loads(res)
results += res_dict.get('neededData', [])

这将工作,并继续使用所需数据中的项更新您的结果数组

一些测试:

Python 3.7.3 (default, Mar 27 2019, 22:11:17) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = []
>>> b = [1,2]
>>> a.append(3)
>>> a
[3]
>>> a += b
>>> a
[3, 1, 2]
>>> a += []
>>> a 
[3, 1, 2]   # no change
>>> a += [5,6]
>>> a
[3, 1, 2, 5, 6]
>>> jst = '{ "l": [{"a":1, "b":2}, {"a":3, "b": 4}], "v": "other"}'
>>> json.loads(jst)
{'l': [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}], 'v': 'other'}
>>> type(json.loads(jst))
<class 'dict'>
>>> json.loads(jst).get('l', [])
[{'a': 1, 'b': 2}, {'a': 3, 'b': 4}]

从每个API响应中扩展结果列表。

all_data = []
for res in api_results:
all_data.extend(res.neededData)

如果您的原始数据看起来像这样:

dataset = { 
"success":True,
"otherData":0,
"neededData":[
{"moreData":0,"data":1},
{"moreData":1,"data":0}
]
}

然后你就可以访问"需要的数据"了。用dataset['neededData'],或者dataset.get('neededData', list()),在需要的数据并不总是存在的情况下。至少,根据你原来的例子。


如果您有多个具有该形状数据的请求响应,您可以将它们聚合在一起,并按照以下行进行更多操作:

dataset = [item for itemlist in responses for item in itemlist.get("neededData", [])]

大致相当于:

dataset = []
for itemlist in responses:
for item in itemlist.get("neededData", []):
dataset.append(item)

相关内容

  • 没有找到相关文章

最新更新