YAML多层嵌套与Python字典

15

我对yaml很新奇,输出结果符合预期,但想知道有没有更好的方法来构建下面嵌套的对象。

import yaml
yaml.load ("""
test1:
    a: 
      a1:
        a2:
          a3: 0
          b3: 0
          c3: 0
        b2:         
          a3: 0
          b3: 0
          c3: 0
        c2:
          a3: 0
          b3: 0
          c3: 0  
      b1:
        a2:
          a3: 0
          b3: 0
          c3: 0
        b2:         
          a3: 0
          b3: 0
          c3: 0
        c2:
          a3: 0
          b3: 0
          c3: 0 
      c1:
        a2:
          a3: 0
          b3: 0
          c3: 0
        b2:         
          a3: 0
          b3: 0
          c3: 0
        c2:
          a3: 0
          b3: 0
          c3: 0 
    b: 
      a1:
        a2:
          a3: 0
          b3: 0
          c3: 0
        b2:         
          a3: 0
          b3: 0
          c3: 0
        c2:
          a3: 0
          b3: 0
          c3: 0  
      b1:
        a2:
          a3: 0
          b3: 0
          c3: 0
        b2:         
          a3: 0
          b3: 0
          c3: 0
        c2:
          a3: 0
          b3: 0
          c3: 0 
      c1:
        a2:
          a3: 0
          b3: 0
          c3: 0
        b2:         
          a3: 0
          b3: 0
          c3: 0
        c2:
          a3: 0
          b3: 0
          c3: 0 
    c: 
      a1:
        a2:
          a3: 0
          b3: 0
          c3: 0
        b2:         
          a3: 0
          b3: 0
          c3: 0
        c2:
          a3: 0
          b3: 0
          c3: 0  
      b1:
        a2:
          a3: 0
          b3: 0
          c3: 0
        b2:         
          a3: 0
          b3: 0
          c3: 0
        c2:
          a3: 0
          b3: 0
          c3: 0 
      c1:
        a2:
          a3: 0
          b3: 0
          c3: 0
        b2:         
          a3: 0
          b3: 0
          c3: 0
        c2:
          a3: 0
          b3: 0
          c3: 0  

""")

输出:

'test1': {'a': {'a1': {'c2': {'c3': 0, 'a3': 0, 'b3': 0}, 'a2': {'c3': 0, 'a3': 0, 'b3': 0}, 'b2': {'c3': 0, 'a3': 0, 'b3': 0}}, 'c1': {'c2': {'c3': 0, 'a3': 0, 'b3': 0}, 'a2': {'c3': 0, 'a3': 0, 'b3': 0}, 'b2': {'c3': 0, 'a3': 0, 'b3': 0}}, 'b1': {'c2': {'c3': 0, 'a3': 0, 'b3': 0}, 'a2': {'c3': 0, 'a3': 0, 'b3': 0}, 'b2': {'c3': 0, 'a3': 0, 'b3': 0}}}, 'c': {'a1': {'c2': {'c3': 0, 'a3': 0, 'b3': 0}, 'a2': {'c3': 0, 'a3': 0, 'b3': 0}, 'b2': {'c3': 0, 'a3': 0, 'b3': 0}}, 'c1': {'c2': {'c3': 0, 'a3': 0, 'b3': 0}, 'a2': {'c3': 0, 'a3': 0, 'b3': 0}, 'b2': {'c3': 0, 'a3': 0, 'b3': 0}}, 'b1': {'c2': {'c3': 0, 'a3': 0, 'b3': 0}, 'a2': {'c3': 0, 'a3': 0, 'b3': 0}, 'b2': {'c3': 0, 'a3': 0, 'b3': 0}}}, 'b': {'a1': {'c2': {'c3': 0, 'a3': 0, 'b3': 0}, 'a2': {'c3': 0, 'a3': 0, 'b3': 0}, 'b2': {'c3': 0, 'a3': 0, 'b3': 0}}, 'c1': {'c2': {'c3': 0, 'a3': 0, 'b3': 0}, 'a2': {'c3': 0, 'a3': 0, 'b3': 0}, 'b2': {'c3': 0, 'a3': 0, 'b3': 0}}, 'b1': {'c2': {'c3': 0, 'a3': 0, 'b3': 0}, 'a2': {'c3': 0, 'a3': 0, 'b3': 0}, 'b2': {'c3': 0, 'a3': 0, 'b3': 0}}}}} 
1个回答

24

我想到了两种方法,可以帮助您在yaml中少输入一些内容。

使用短映射语法:


test1:
    a:
      a1:
        a2: {a3: 0, b3: 0, c3: 0}
        b2: {a3: 0, b3: 0, c3: 0}
        c2: {a3: 0, b3: 0, c3: 0}
      b1:
        a2: {a3: 0, b3: 0, c3: 0}
        b2: {a3: 0, b3: 0, c3: 0}
        c2: {a3: 0, b3: 0, c3: 0}
      c1:
        a2: {a3: 0, b3: 0}

使用别名:

entry: &aliasentry
  a2: {a3: 0, b3: 0, c3: 0}
  b2: {a3: 0, b3: 0, c3: 0}
  c2: {a3: 0, b3: 0, c3: 0}

test1:
    a:
      a1: *aliasentry
      b1: *aliasentry
      c1: {a2: {a3: 0, b3: 0}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接