从嵌套字典中获取常用键值对

时间:2021-02-16 00:37:48

标签: python json dictionary nested

我正在尝试通过在公共键值对上组合两个字典来创建嵌套字典

字典如下:

dict1 = {'employee': {1: {'empId': 1, 'salary': 1000}, 2: {'empId': 2, 'salary': 2000}}}
dict2 = {'time': {1: {'empId': 1, 'avgtime': 55}, 2: {'empId': 1, 'avgtime': 25}, 3: {'empId': 2, 'avgtime': 25}}}

我想将两者结合起来创建一个字典,time是员工内部的嵌套字典,如下所示......

dict3 = {'employee': {1: {'empId': 1, 'salary': 1000, 'avgtime': {1: 55, 2: 25}}}, 2: {'empId': 2, 'salary': 2000, 'avgtime': {1: 25}}}

我尝试了几件事,可以将整个 dict2 附加到 dict1 的末尾,但无法弄清楚每次有键/值匹配时如何添加嵌套的 dict

def merge(d1, d2):
    for thing1, thing2 in list(zip(d1['employee'].values(), d2['time'].values())):
        d1['time'] = {}
        for k in thing1.items():
            if k in thing2.items():
                d1['time'].update(thing2)
        return d1
a = merge(dict1,dict2)
print(a)

上面的输出给出了以下结果,但它是我得到的最接近的

{'employee': {1: {'empId': 1, 'salary': 1000}, 2: {'empId': 2, 'salary': 2000}}, 'time': {'empId': 1, 'avgtime': 55}}

所以我的问题是如何将这两个字典组合成一个公共键值对,如 dict3 所示

1 个答案:

答案 0 :(得分:1)

你必须把它想象成一个数据库,其中 dict1 是 master。您不能使用“zip”,因为记录不会一对一排列。您必须搜索 dict2 记录才能找到匹配的员工 ID。另请注意,您实际上不必返回“d1”;您的代码正在修改 dict1 到位。这可以满足您的要求:

def merge(d1, d2):
    for k1,v1 in d1['employee'].items():
        v1['avgtime'] = {}
        for k2,v2 in d2['time'].items():
            if v2['empId'] == v1['empId']:
                v1['avgtime'][k2] = v2['avgtime']
merge(dict1,dict2)
print(dict1)