从嵌套字典生成对
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键,在d1
和d2
中找到具有该键的二级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)
}
有什么方法可以从 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键,在d1
和d2
中找到具有该键的二级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)
}