You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何向YAML文件添加新键值对而不覆盖原有内容?

YAML更新时键值对被覆盖的原因及解决方法

为什么第一次赋值会被覆盖

你两次都是直接给data['WIN']['Machine']赋值全新的dict()对象:

  • 第一次赋值后,Machine是包含node_labels的字典
  • 第二次赋值直接把Machine替换成了只包含vs的新字典,原有的键值对自然被覆盖。

如何添加多个键值对

有几种可靠的方式实现需求:

方式1:一次性构造完整字典赋值

直接创建包含所有键值对的字典,一次性赋值给Machine:

data = yaml.safe_load(file)  # 推荐用safe_load替代load,避免安全风险
data['WIN']['Machine'] = {
    'node_labels': '+> tfs vs2022',
    'vs': 'vs2022'
}
yaml.dump(data, file)

方式2:逐个添加键值对(适合增量更新)

先确保Machine字典存在,再逐个添加键值对,不会覆盖原有内容:

data = yaml.safe_load(file)
# 确保WIN下的Machine存在,不存在则初始化空字典
if 'Machine' not in data['WIN']:
    data['WIN']['Machine'] = {}
# 逐个添加键值对
data['WIN']['Machine']['node_labels'] = '+> tfs vs2022'
data['WIN']['Machine']['vs'] = 'vs2022'
yaml.dump(data, file)

方式3:先获取字典对象再批量更新

如果Machine已存在,也可以先拿到它的引用,再批量更新(不会覆盖原有其他键值对):

data = yaml.safe_load(file)
machine_dict = data['WIN']['Machine']
machine_dict.update({
    'node_labels': '+> tfs vs2022',
    'vs': 'vs2022'
})
yaml.dump(data, file)

内容的提问来源于stack exchange,提问作者endianness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:35:28