我有两个字典,它们的键不同,但是可以具有相同的值。
dict1 = {key1:[['abc','12'],['xyz','34'],['pqr',[56]]],key2:[['name','lin'],['age','yes']]}
dict_2 = {key3: '(( value(abc) = literal(12) or value(like) = literal(music) ) and (value(PRICELIST) in propval(valid))'}
如果您看到两个字典的值都可能在两个字典中重复。我要实现的目标是:将value
中的dict_2
替换为dict_1
的密钥。
我期望的输出是:
dict_2 = {key3:'(key1 or value(like) = literal(music) )....'}
我可以使用相同的键进行字典操作,但可以确定键不同但值相同的情况。
编辑: 我发现需要考虑的几件事:
还必须考虑value
和literal
之间的运算符。例如,abc > 10
现在也应该替换,因为符合条件的abc = 12
的值实际上大于10。
按照@DirtyBit的建议,我只打算替换dict_2上的部分值。
因此,我尝试将正则表达式添加到代码中以拆分元素,该元素可以按预期工作,但仍无法用dict_1中的匹配键替换:
for (k,v), (k2,v2) in zip(dict1.items(), dict_2.items()):
#print(v2)
for element in re.findall('([a-zA-Z0-9\._]+(?:\()[a-zA-Z0-9\._]+(?:\))[\s=<>(?:in)]+[a-zA-Z0-9\._]+(?:\()[a-zA-Z0-9\._]+(?:\)))',v2):
# print(element)
print(k2, ": ", v2.replace(element, k))
答案 0 :(得分:2)
继续问问题:
dict1 = {
'key1':[['abc','12'],['xyz','34'],['pqr',[56]]],
'key2':[['name','lin'],['age','yes']]
}
dict_2 = {
'key3': '(( value(abc) = literal(12) or value(like) = literal(music) ) and (value(PRICELIST) in propval(valid))',
'key4': '(( value(abc) = literal(12) or value(like) = literal(music) ) and (value(PRICELIST) in propval(valid))'
}
res = {}
# desired
# dict_2 = {key3:'(key1 or value(like) = literal(music) )....'}
for (k,v), (k2,v2) in zip(dict1.items(), dict_2.items()):
print(k2, ": ", v2.replace("( value(abc) = literal(12)", k))
输出:
key3 : (key1 or value(like) = literal(music) ) and (value(PRICELIST) in propval(valid))
key4 : (key2 or value(like) = literal(music) ) and (value(PRICELIST) in propval(valid))