首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python中的yaml字典中删除键值对

从python中的yaml字典中删除键值对
EN

Stack Overflow用户
提问于 2019-10-20 01:21:06
回答 2查看 1.8K关注 0票数 1

我们希望使用python从YAML文件中删除键和值,例如

代码语言:javascript
复制
- misc_props:
  - attribute: tmp-1
    value: 1
  - attribute: tmp-2
    value: 604800
  - attribute: tmp-3
    value: 100
  - attribute: tmp-4
    value: 1209600
  name: temp_key1
  attr-1: 20
  attr-2: 1
- misc_props:
  - attribute: tmp-1
    value: 1
  - attribute: tmp-2
    value: 604800
  - attribute: tmp-3
    value: 100
  - attribute: tmp-4
    value: 1209600
  name: temp_key2
  atrr-1: 20
  attr-2: 1

从上面的示例中,我们想要删除整个属性,其中键名称与值匹配,例如,如果我们想删除名称: temp_key2删除后新创建的字典将如下所示:-

代码语言:javascript
复制
- misc_props:
  - attribute: tmp-1
    value: 1
  - attribute: tmp-2
    value: 604800
  - attribute: tmp-3
    value: 100
  - attribute: tmp-4
    value: 1209600
  name: temp_key1
  attr-1: 20
  attr-2: 1
EN

回答 2

Stack Overflow用户

发布于 2019-10-20 03:17:49

删除键-值对以获得所需的输出是不够的。

代码语言:javascript
复制
import sys
import ruamel.yaml


yaml = ruamel.yaml.YAML()
with open('input.yaml') as fp:
    data = yaml.load(fp)
del data[1]['misc_props']
yaml.dump(data, sys.stdout)

因为这给出了:

代码语言:javascript
复制
- misc_props:
  - attribute: tmp-1
    value: 1
  - attribute: tmp-2
    value: 604800
  - attribute: tmp-3
    value: 100
  - attribute: tmp-4
    value: 1209600
  name: temp_key1
  attr-1: 20
  attr-2: 1
- name: temp_key2
  atrr-1: 20
  attr-2: 1

您需要做的是删除作为YAML结构根的序列中的一项:

代码语言:javascript
复制
del data[1]
yaml.dump(data, sys.stdout)

这就给出了:

代码语言:javascript
复制
- misc_props:
  - attribute: tmp-1
    value: 1
  - attribute: tmp-2
    value: 604800
  - attribute: tmp-3
    value: 100
  - attribute: tmp-4
    value: 1209600
  name: temp_key1
  attr-1: 20
  attr-2: 1
票数 0
EN

Stack Overflow用户

发布于 2019-10-20 01:54:49

你有没有试过使用yaml模块?

代码语言:javascript
复制
import yaml
with open('./old.yaml') as file:
    old_yaml = yaml.full_load(file)

#This is the part of the code which filters out the undesired keys
new_yaml = filter(lambda x: x['name']!='temp_key2', old_yaml) 

with open('./new.yaml', 'w') as file:
    documents = yaml.dump(new_yaml, file)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58466174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档