从嵌套字典生成对

Generate pairs from nested dictionaries

有什么方法可以从 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中遍历top-level键,在d1d2中找到具有该键的二级dicts中的所有键,然后构建你的新字典使用 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)
}