改革到一个新的时代

2024-05-15 23:52:50 发布

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

总之,我正在尝试将airtable中的JSON数据转换为新JSON中的另一种形式,但是我被卡住了。这是我从airtable获得的JSON:

dataset = {"records": [{"id": "recVqe2l15WKanDS1", "fields": {"confirm": "2", "state": "MA\n", "time": "2019-01-01", "predict": "2"}, "createdTime": "2020-09-19T01:53:47.000Z"}, 
{"id": "rechRMD3sKzsweZO8", "fields": {"confirm": "1", "state": "MA\n", "time": "2019-01-01", "predict": "1"}, "createdTime": "2020-09-19T01:53:47.000Z"}, 
{"id": "recnO0uTnz3LmJNGF", "fields": {"confirm": "3", "state": "MA\n", "time": "2019-01-01", "predict": "3"}, "createdTime": "2020-09-19T01:53:47.000Z"}]}

我唯一需要的是每个"fields"中的信息和 "state"的键。所以它看起来像:

{
    MA:[{"confirm": "2", "time": "2019-01-01", "predict": "2"},
    {"confirm": "1", "time": "2019-01-01", "predict": "1"},
    {"confirm": "3",  "time": "2019-01-01", "predict": "3"}
    ....(there could be more state data like this)
}

在本例中,我首先从原始数据中删除了state:MA\n,并用冒号将其移到前面。以下是我迄今为止所做的尝试

records = dataset['records']
for i in records:
    fields = i['fields']
    state = i['fields'].get('state')
    
print(state)

输出结果如下所示:

MA
MA
MA

我可以得到如下字段数据:

records = dataset['records']
for i in records:
    fields = i['fields']
    print(fields)

看起来是这样的:

{'confirm': '2', 'state': 'MA\n', 'time': '2019-01-01', 'predict': '2'}
{'confirm': '1', 'state': 'MA\n', 'time': '2019-01-01', 'predict': '1'}
{'confirm': '3', 'state': 'MA\n', 'time': '2019-01-01', 'predict': '3'}

我只是想知道如何改革它们,使其看起来像我想要的数据 非常感谢你的帮助!!我真的很感激


Tags: 数据inidjsonfieldsfortimepredict
3条回答

这将为您提供所需的输出:

new_format = {'MA': [{
    'confirm': record['fields']['confirm'],
    'time': record['fields']['time'],
    'predict': record['fields']['predict']
    } for record in dataset["records"]]}

dataset上迭代时,可以使用所需的数据构建dict

results = {}

for record in dataset["records"]:
    # extract and remove state
    state = record["fields"].pop("state").strip()

    if not state in results: # new state found
        results[state] = []

    # append data to corresponding state
    results[state].append(record["fields"])

当我们使用defaultdict时,可以做得稍微短一点:

from collections import defaultdict

results = defaultdict(list)

for record in dataset["records"]:
    results[record["fields"].pop("state").strip()].append(record["fields"])

输出:

{'MA': [{'confirm': '2', 'time': '2019-01-01', 'predict': '2'},
  {'confirm': '1', 'time': '2019-01-01', 'predict': '1'},
  {'confirm': '3', 'time': '2019-01-01', 'predict': '3'}]}

您也可以尝试以下代码:

dataset = {"records":[{"id":"recVqe2l15WKanDS1","fields":{"confirm":"2","state":"MA\n","time":"2019-01-01","predict":"2"},"createdTime":"2020-09-19T01:53:47.000Z"},{"id":"rechRMD3sKzsweZO8","fields":{"confirm":"1","state":"MA\n","time":"2019-01-01","predict":"1"},"createdTime":"2020-09-19T01:53:47.000Z"},{"id":"recnO0uTnz3LmJNGF","fields":{"confirm":"3","state":"MA\n","time":"2019-01-01","predict":"3"},"createdTime":"2020-09-19T01:53:47.000Z"},{"id":"rechRMD3sKzsweZO8","fields":{"confirm":"1","state":"CD\n","time":"2019-01-01","predict":"1"},"createdTime":"2020-09-19T01:53:47.000Z"},{"id":"rechRMD3sKzsweZO8","fields":{"confirm":"1","state":"CD\n","time":"2019-01-01","predict":"1"},"createdTime":"2020-09-19T01:53:47.000Z"},{"id":"rechRMD3sKzsweZO8","fields":{"confirm":"1","state":"QW\n","time":"2019-01-01","predict":"1"},"createdTime":"2020-09-19T01:53:47.000Z"}]}


state_dict = {}
for data in dataset['records']:
    state = data['fields'].pop('state')
    state_dict.update(
        {
            state: state_dict.get(state, [])
        }
    )
    state_dict[state].append(data['fields'])
print(state_dict)

输出:

{'MA\n': [{'confirm': '2', 'time': '2019-01-01', 'predict': '2'}, {'confirm': '1', 'time': '2019-01-01', 'predict': '1'}, {'confirm': '3', 'time': '2019-01-01', 'predict': '3'}], 'CD\n': [{'confirm': '1', 'time': '2019-01-01', 'predict': '1'}, {'confirm': '1', 'time': '2019-01-01', 'predict': '1'}], 'QW\n': [{'confirm': '1', 'time': '2019-01-01', 'predict': '1'}]}

相关问题 更多 >