Schleife durch eine verschachtelte python-dictionary/Liste geladen von yaml

Ok, das ist vielleicht dumm. Im Grunde versuche ich eine Schleife über meine verschachtelten yaml-Datei und Sachen tun, zum Beispiel mit jedem Schlüssel-Wert in meiner Liste. Ich habe eine Menge zu Lesen und ich bin in der Lage, um eine Schleife durch ein verschachteltes dictionary, ohne die Liste, aber ich weiß nicht wan ' T, um die Verwendung eindeutiger Schlüssel für die Knoten.

Dies funktioniert:

lev-0a:
lev-1a:
node1:
key-a: '1'

node2:
 key-a: '2'

Aber wenn ich versuche, um die Iteration eines nested dict mit "Liste" Objekte schlägt fehl.

Yaml:

lev-0a:
  lev-1a:
    - key-a: '1'
      key-b: '2'
      key-c: '3'
      key-d:
        level-2:
          - key: 'a'
          - key: 'b'
          - key: 'c'

    - key-a: '7'
      key-b: '8'
      key-c: '9'
      key-d:
        level-2:
          - key: 'x'
          - key: 'y'
          - key: 'z'

Druckeinstellungen von python:

{'lev-0a': {'lev-1a': [{'key-c': '3', 'key-b': '2', 'key-a': '1', 'key-d': {'level-2': [{'key': 'a'}, {'key': 'b'}, {'key': 'c'}]}}, {'key-c': '9', 'key-b': '8', 'key-a': '7', 'key-d': {'level-2': [{'key': 'x'}, {'key': 'y'}, {'key': 'z'}]}}]}}

Mein code:

env.settings_file = env.setting_path + '/settings.yaml'

def load_settings(settings=env.settings_file):
    try:
        with open(settings) as stream:
            data = yaml.load(stream)
            return data
    except IOError as error:
        print ('File error: ' + str(error))


def dev(settings=load_settings()):

    for k, v in settings['lev-0a']['lev-1a'].iteritems():
        print v['key-a']
        # do stuff with every key-a value

Fehler:

TypeError: list indices must be integers, not str

Wenn ich dies tun:

for k, v in settings['lev-0a']['lev-1a'][0].iteritems():
    print k,v

Ich erhalten:

key-c 3
key-b 2
key-a 1
key-d {'level-2': [{'key': 'a'}, {'key': 'b'}, {'key': 'c'}]}

Dank!

InformationsquelleAutor Andreas | 2015-02-16
Schreibe einen Kommentar