从嵌套字典生成对



有没有办法从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中的顶级键,在d1d2中使用该键查找二级字典中的所有键,然后使用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)
}

相关内容

  • 没有找到相关文章

最新更新