将嵌套字典中的生成与真实值配对
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)}
我有一个这样的输入字典
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)}