Python 使用公共条目合并json数组

Python 使用公共条目合并json数组,python,arrays,json,merge,Python,Arrays,Json,Merge,我有一个python脚本,它使用GetAPI为我提供两个json数组 数据1 数据2 我想使用公共条目合并这两个元素,因此在本例中,“number”和“task”是相同的,它们合并数组中的其余数据 例如 'number':'0010041','month':'一月','time_left':'20秒' “数字”:0010042;“月份”:三月;“剩余时间”:6分钟 如何排序?如果结果列表总是排序的,下面的示例会有所帮助: results = [] for i in range(len(data

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

数据1

数据2

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

例如

'number':'0010041','month':'一月','time_left':'20秒'
“数字”:0010042;“月份”:三月;“剩余时间”:6分钟

如何排序?

如果结果列表总是排序的,下面的示例会有所帮助:

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

您可以从元素角度来处理此问题:

results = []
for i in range(len(data1['result'])):
    results.append({
        'number': data1[i]['number'],
        'month': data1[i]['month'],
        'time_left': data2[i]['time_left']
    })
以下是一种使用库的方法:


这应该可以做到:

  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
  }

结果并不总是排序相同。然而,来自data1和data2的关于“0010041”的信息是关于同一个元素的,所以我想使用它并进行匹配和合并。这很神奇,最后一点我忘了提到。然后如何按时间排序?请选择编辑,我假设时间总是在
min
seconds
。如果以小时为单位,你需要把它转换成秒。所以假设以小时为单位。。。我该怎么做?我很高兴能在几分钟内完成几个小时,所以1小时5分钟等于65分钟。最后一个问题,promise,别担心,我已经在API调用中添加了这个条件,以便对Get上的数据进行排序。谢谢你的帮助。这真是奇迹,最后一点我忘了提。那么,如何按时间左,最低的先排序呢?@TimHannah注意,在您的示例中,“时间左”是不同的时间单位,是字符串而不是数字“20秒”应该在“6分钟”之前,但“20分钟”应该在“6分钟”之后,对吗?我认为这一要求值得提出自己的问题。这可能会导致类似
results = []
for i in range(len(data1['result'])):
    results.append({
        'number': data1[i]['number'],
        'month': data1[i]['month'],
        'time_left': data2[i]['time_left']
    })
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'}]
  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
  }