我正在尝试通过在公共键值对上组合两个字典来创建嵌套字典
字典如下:
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 所示
答案 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)