python3忽略空值的简单方法

时间:2018-03-12 11:06:52

标签: python-3.x

我正在开发一个项目,我需要解析一个YAML文件并将其内容写入另一个文件中。现在,键值可以为空,在这种情况下,应该忽略该值,即不应该写入文件中。我可以编写一个“if语句”来检查值是否为空,只有在文件写入时才写入文件,但有没有更简单的方法呢?

1 个答案:

答案 0 :(得分:0)

使用if过滤空键是正常的'实现这一目标的方法。

您可以使用if作为词典理解的一部分,在一个步骤中删除所有具有空值的键,然后使用此新词典。

import yaml

with open("my.yaml") as yaml_f:
    data = {k: v for k, v in yaml.safe_load(yaml_f.read()).items() if v}

当然,这只是编写完整循环的另一种方法:

data = {}
with open("my.yaml") as yaml_f:
    for k, v in yaml.safe_load(yaml_f.read()).items():
    if v:
        data[k] = v

注意 - 有一些方法可以设置yaml模块来修改从yaml文件生成的结果字典 - 但是这需要在yaml中使用标记。例如:

import yaml

my_yaml = """
--- !MyTag
a: 1
b: 2
c: ""
"""

def constructor_none(loader, node):
    return {k: v for k, v in loader.construct_mapping(node).items() if v}

yaml.add_constructor('!MyTag', constructor_none)

yaml.safe_load(my_yaml)
# {'a': 1, 'b': 2}