将嵌套字典中的生成与真实值配对

Pair Generation from nested dictionaries with real values

我有一个这样的输入字典

dict1= {'AM': ['tv', 'rs', 'pq', 'MN', 'tN', 'tq', 'OP', 'tP', 'QR', 'tr'],
    'BR': ['tv', 'rs', 'pq', 'MN', 'tN', 'tq', 'OP', 'tP', 'QR', 'tr']}

我要搜索的另外两个词典是

dict2_1={'AM':{'pq':1.2,'rs':2.41,'tv':3.81},'BR':{'MN':1.3,'OP':1.41,'QR':1.81}}
dict3_1={'AM':{'tq':1.3,'rs':1.41,'tv':2.41},'BR':{'tN':1.8,'tP':1.81,'tr':1.42}}

预期输出

{'AM-tv': (3.81,2.41),
 'AM-rs': (2.41,1.41),
 'AM-pq': (1.2,'insert'),
 'AM-MN': ('insert','insert'),
 'AM-tN': ('insert','insert'),
 'AM-tq': ('insert',1.3),
 'AM-OP': ('insert','insert'),
 'AM-tP': ('insert','insert'),
 'AM-QR': ('insert','insert'),
 'AM-tr': ('insert','insert'),
 'BR-tv': ('insert','insert'),
 'BR-rs': ('insert','insert'),
 'BR-pq': ('insert','insert'),
 'BR-MN': (1.3,'insert'),
 'BR-tN': ('insert',1.8),
 'BR-tq': ('insert','insert'),
 'BR-OP': (1.41,'insert'),
 'BR-tP': ('insert',1.81),
 'BR-QR': (1.81,'insert'),
 'BR-tr': ('insert',1.42)}

在输出中,需要生成一对dict1。如果 dict1 的值出现在 dict2_1 或 dict2_2 的内部嵌套字典键中,那么它将替换为内部嵌套字典值,否则它将替换为 'insert'。有什么办法吗?

如果字典中不存在键(在本例中为“插入”),您可以使用 dict.get 设置默认值:

out = {}
for k, lst in dict1.items():
    for v in lst:
        out[f"{k}-{v}"] = (dict2_1[k].get(v, 'insert'), dict3_1[k].get(v, 'insert'))

上面的代码也可以写成字典理解:

out = {f"{k}-{v}": (dict2_1[k].get(v, 'insert'), dict3_1[k].get(v, 'insert')) for k, lst in dict1.items() for v in lst}

输出:

{'AM-tv': (3.81, 2.41),
 'AM-rs': (2.41, 1.41),
 'AM-pq': (1.2, 'insert'),
 'AM-MN': ('insert', 'insert'),
 'AM-tN': ('insert', 'insert'),
 'AM-tq': ('insert', 1.3),
 'AM-OP': ('insert', 'insert'),
 'AM-tP': ('insert', 'insert'),
 'AM-QR': ('insert', 'insert'),
 'AM-tr': ('insert', 'insert'),
 'BR-tv': ('insert', 'insert'),
 'BR-rs': ('insert', 'insert'),
 'BR-pq': ('insert', 'insert'),
 'BR-MN': (1.3, 'insert'),
 'BR-tN': ('insert', 1.8),
 'BR-tq': ('insert', 'insert'),
 'BR-OP': (1.41, 'insert'),
 'BR-tP': ('insert', 1.81),
 'BR-QR': (1.81, 'insert'),
 'BR-tr': ('insert', 1.42)}