字典中的更新会覆盖python中的键值对

时间:2018-08-06 10:51:47

标签: python dictionary

我想创建一个字典,使其包含另一个键值对。 在字典中使用更新方法时,它将覆盖旧的键,值对。

import yaml

d1={}
l1=[]
d2={}

with open("testspec.yaml","r") as stream:
    d1.update(yaml.load(stream))

l1=d1['TestSpec'].keys()
print(l1)
for i in l1:
    #d2[i]='None'
    for key,value in d1['TestSpec'][i].items():
        if "STEP" in key:
            d2.update({i : {key :value}})      
            #print(d1['TestSpec'][i])
        else:
            del d1['TestSpec'][i][key]
#print(d1)
print(d2)

l1 / print(l1)的输出:

  

['A1','A2','A3','A4']

最终输出/打印(d2):

  

{'A1':{'STEP_8':'A1_08'},'A2':{'STEP_12':'A2_12'},'A3':{'STEP_34':'A3_34'},'A4': {'STEP_8':'A4_08'}}

for循环,它从d1 ['TestSpec'] [i] .items()返回键,值对,例如STEP_1 : A1_1 STEP_2 : A1_2 等等...

预期输出:

  

{'A1':{'STEP_1':'A1_1','STEP_2':'A1_2','STEP_3':'A1_3'},}同样适用于所有A2,A3,A4。

2 个答案:

答案 0 :(得分:0)

据我所知,方法update() 完全会更新密钥的值。如果要将其他值附加到与键对应的现有值上,建议使用old value + new value

更新该值

让我知道此答案是否对您有用,或者我在某些方面有误。

答案 1 :(得分:0)

如果我对您的理解正确,那么您想添加到从相关键返回的现有字典中。

为此替换您的.update()行:

d2[i][key] = value

简单地说,您想附加到返回的字典中,而不是用另一个键/值对覆盖它。