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

2024-10-02 14:21:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我一直试图解决,但我还没有找到正确的方法来做这件事

我有大约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}]

包括列表中的所有数据

我怎样才能做到这一点


Tags: 数据方法apijsontrue列表data格式
3条回答

如果原始数据如下所示:

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)

如果您不断地以json字符串的形式获得该格式的响应 在Python3.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)

相关问题 更多 >