yaml多嵌套和python字典

时间:2012-09-18 00:19:56

标签: python yaml

我是yaml的新手,输出是预期的格式,但想知道是否有更好的方法在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 个答案:

答案 0 :(得分:15)

我可以想到两种方法可以节省你在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}}