使用相同的值和不同的键更新字典

时间:2019-03-12 06:27:25

标签: python

我有两个字典,它们的键不同,但是可以具有相同的值。

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) )....'}

我可以使用相同的键进行字典操作,但可以确定键不同但值相同的情况。

编辑: 我发现需要考虑的几件事:

  1. 还必须考虑valueliteral之间的运算符。例如,abc > 10现在也应该替换,因为符合条件的abc = 12的值实际上大于10。

  2. 按照@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))

1 个答案:

答案 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))