如何合并两个JSON并只更新相等的DICT?

2024-09-29 00:12:46 发布

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

假设我有以下JSON,其中我希望合并公共数据键、值,如果两者都包含相同的id,则更新URL,但如果存在不同的id,则也将JSON添加到数组中

def mergeDicts(*data):
    merged = dict()
    for dicts in data:
        for d in dicts:
            for k,v in d.items():
                if not isinstance(v,list): v = [v]
                merged[k] = list(set(merged.get(k,[]) + v))
    return merged

虚拟数据

json1 = [{'id': 'demo1', 'url': ['data','data']}, {'id': 'demo2', 'url': ['data','data', 2]}]
json2 = [{'id': 'demo1', 'url': ['data','data1', 2]}]

期望输出

[
    {'id': 'demo1', 'url': ['data','data1',2]},
    {'id': 'demo2', 'url': ['data', 2]}
]

电流输出

{'id': ['demo1', 'demo2'], 'url': ['data', 2, 'data1']}

Tags: inidjsonurlfordata数组merged
1条回答
网友
1楼 · 发布于 2024-09-29 00:12:46

看看这是否适合您:

json1 = [{'id': 'demo1', 'url': ['data','data']}, {'id': 'demo2', 'url': ['data','data', 2]}]
json2 = [{'id': 'demo1', 'url': ['data','data1', 2]}]
jsonlist = [json1, json2]
    
def mergeDicts(jsonlist):
    url_list = []
    id_list = []
    for j1 in jsonlist:
        for j in j1:
            id_list.append(j['id'])
            url_list.append(j['url'])  

    tup = list(zip(id_list, url_list)) #makes a tuple of id, urllist for later

    demolist = sorted(list(set(id_list))) #set removes duplicates from list
    list1 = []
    list2 = []
    for t in tup:
        if t[0] == demolist[0]:
            list1.extend(t[1]) #extend rather than append to create one list
        else:
            list2.extend(t[1]) 

    merged = [{'id': demolist[0] , 'url': list(set(list1))}, {'id': demolist[1], 'url': list(set(list2))}]
    return merged    
    
%timeit merged = mergeDicts(jsonlist)
print(merged)

输出

[{'id': 'demo1', 'url': [2, 'data', 'data1']},
 {'id': 'demo2', 'url': [2, 'data']}]

相关问题 更多 >