【问题标题】:Update in dictionary is overwriting the key value pair in python字典中的更新正在覆盖 python 中的键值对
【发布时间】:2018-08-06 10:51:46
【问题描述】:

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

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

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

预期输出:

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

【问题讨论】:

  • 欢迎来到 SO。请提供 minimal reproducible example。我们无权访问您输入的yaml 文件,因此请提供完整的输入示例。

标签: python dictionary


【解决方案1】:

据我所知,update() LITERALLY 方法会更新键的值。如果您想将另一个值附加到与键对应的现有值,我建议使用 old value + new value 更新值

让我知道这个答案是否适合你,或者我在某些方面有误。

【讨论】:

  • 我不太了解旧值和新值的概念,请您简单解释一下。感谢您的帮助。
  • 对于每个键,您都在存储一个数组。当您更新键的值时,更新函数仅存储键的新值并删除旧值。假设当您使用值 3 更新 A1 时,您的“A1”键存储数组 {“1”,“2”},您的“A1”键仅存储值 {“3”}。
【解决方案2】:

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

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

d2[i][key] = value

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

【讨论】:

  • 感谢您的帮助,但我尝试了这种方式,然后我得到一个 keyerror: 'A1'
猜你喜欢
  • 2017-07-22
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 2017-04-25
  • 2019-06-08
  • 2016-02-20
相关资源
最近更新 更多