2012-09-18 9 views
8

私はyamlに新しいです。出力は期待された形式ですが、yamlの中で以下の入れ子になったオブジェクトを構築するより良い方法があるのだろうかと思っています。yaml multi nestedとpython dictionary

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

は短いマッピング構文を使用します。