使用公共条目合并json数组

2024-09-26 17:50:48 发布

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

我有一个python脚本,它使用GetAPI为我提供两个json数组

数据1

{'result': [
    {'number': '0010041', 'month': 'January'}, 
    {'number': '0010042', 'month': 'March'}
    ]}

数据2

{'result': [
    {'task': '0010041', 'time_left': '20 sec'}, 
    {'task': '0010042', 'time_left': '6 min'}
    ]}

我想使用公共条目合并这两个元素,因此在本例中,“number”和“task”是相同的,它们合并数组中的其余数据

例如

'number': '0010041', 'month': 'January', 'time_left': '20 sec'
'number': '0010042', 'month': 'March', 'time_left': '6 min'

怎么做


Tags: 数据脚本jsonnumbertasktime数组sec
3条回答

如果始终对结果列表进行排序,则以下示例可能会有所帮助:

results = []
for i in range(len(data1['results'])):
   results.append({**data1['results'][i], **data1['results'][i]})

这应该可以做到:

  d1 = data1['result']
  d2 = data2['result']
  merged_list = []
  for item1 in d1:
    for item2 in d2:
      if item1['number'] == item2['task']:
        merged_dict = {**item1, **item2}
        del(merged_dict['task'])
        merged_list.append(merged_dict)

  merged = {
    'result': merged_list
  }

下面是一种使用^{}库的方法:

import pandas as pd
from pandas.io.json import json_normalize

d1 = json_normalize(d1['result'])
d2 = json_normalize(d2['result'])

# merge the data
lst = d1.merge(d2, left_on='number', right_on='task').drop('task', axis=1)

# converting time to same units (seconds)
lst['time_secs'] = lst['time_left'].str.split().apply(lambda x: int(x[0])*60 if 'min' in x else int(x[0]))

# sort, select cols and convert to dictionary
lst = lst.sort_values('time_secs', ascending=True)[['number','month','time_left']].to_dict(orient='records')

[{'number': '0010041', 'month': 'January', 'time_left': '20 sec'},
 {'number': '0010042', 'month': 'March', 'time_left': '6 min'}]

相关问题 更多 >

    热门问题