2012-09-18 69 views
8

我是新來的yaml輸出是在預期的格式,但想知道是否有更好的方法來構建yaml下面的嵌套對象。yaml多嵌套和python字典

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}}}}} 

回答

14

我能想到的兩種方式,將節省您的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}}