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

2024-03-28 19:17:22 发布

您现在位置: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))'}

如果您看到这两个字典都有可能在这两个字典中重复的值。我试图实现的是:用dict_1键替换value中的dict_2。你知道吗

我期望的结果是:

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

我可以用相同的键进行dict操作,但是可以计算出不同键但值相同的情况。你知道吗

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

  1. 也必须考虑valueliteral之间的运算符。例如abc > 10现在也应该被替换,因为它满足abc = 12的标准值,实际上大于10。

  2. 正如@DirtyBit所建议的,我只打算替换dict2上的部分值。

因此,我尝试将regex添加到代码中,以拆分元素,它按预期工作,但仍然无法替换为dict\ u 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))

Tags: orin字典valueelementdictv2abc
1条回答
网友
1楼 · 发布于 2024-03-28 19:17:22

从问题的评论继续:

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

相关问题 更多 >