首页 > 解决方案 > 使用相同的值和不同的键更新字典

问题描述

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

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

如果您看到两个字典都有可能在两者中重复的值。我想要实现的是:valuedict_2.dict_1

我期待的输出是:

dict_2 = {key3:'(key1 or value(like) = literal(music) )....'}

我可以使用相同的键进行 dict 操作,但可以找出不同键但值相同的情况。

编辑: 我注意到要考虑的几件事:

  1. value和之间的运算符literal也必须考虑。例如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))

标签: 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))',
          '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))

推荐阅读