有没有办法从python中的嵌套字典生成对?我有一个输入字典:
d1 = {'AB':{'BCA':1.2, 'CBA':2.41, 'BCD':3.81},
'DA':{'ADA':1.3, 'BMA':1.41, 'DMA':1.81}}
d2 = { 'AB':{'MNA':1.3,'CMA':1.41,'BCD':2.41},
'DA':{'ADA':1.8, 'BMA':1.81, 'BTA':1.42}}
预期输出:
d3= {('AB'-'BCA'):(1.2,new),
('AB'-'CBA'):(2.41,new),
('AB'-'BCD):(3.81,2.41),
('AB'-'MNA'):(new,1.3),
('AB'-'CMA'):(new,1.41),
('DA'-'ADA'):(1.3,1.8),
('DA'-'BMA'):(1.41,1.81),
('DA'-'DMA'):(1.81,new),
('DA'-'BTA'): (new,11.42)}
有没有办法从输入的嵌套字典中产生这个输出?如果内部字典的键不存在于另一个内部字典中,那么在这种情况下,它将其替换为'new'并维护另一个字典?
您可以迭代d1
中的顶级键,在d1
和d2
中使用该键查找二级字典中的所有键,然后使用dict.get
构建您的新字典,默认值为'new'
以填充空槽:
d3 = {}
for l1key in d1:
for l2key in set(d1[l1key].keys()) | set(d2[l1key].keys()):
d3[f'{l1key} - {l2key}'] = (d1[l1key].get(l2key, 'new'), d2[l1key].get(l2key, 'new'))
输出:
{
'AB - CBA': (2.41, 'new'),
'AB - MNA': ('new', 1.3),
'AB - BCA': (1.2, 'new'),
'AB - BCD': (3.81, 2.41),
'AB - CMA': ('new', 1.41),
'DA - BMA': (1.41, 1.81),
'DA - BTA': ('new', 1.42),
'DA - DMA': (1.81, 'new'),
'DA - ADA': (1.3, 1.8)
}