我试图创建一个嵌套的字典,通过组合两个字典在公共键值对
字典如下:
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作为employee内部的嵌套字典,如下所示.....
dict3 = {'employee': {1: {'empId': 1, 'salary': 1000, 'avgtime': {1: 55, 2: 25}}}, 2: {'empId': 2, 'salary': 2000, 'avgtime': {1: 25}}}
我已经尝试了几件事,可以得到整个dict2追加到dict1的末尾,但不能完全弄清楚如何添加一个嵌套的字典,每次有一个键/值匹配
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}}
那么我的问题是如何将这两个字典组合成一个公共键值对,如dic3
所示您必须将其视为一个数据库,其中dict1是主数据库。你不能使用"zip",因为这些记录不是一一排列的。您必须搜索dic2记录以找到匹配的员工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)