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!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies allein sollten angehoben haben einen Fehler:
settings['lev-0a']['lev-1a'].iteritems():
. In Ihrem code, der referenzierte Wert von['lev-1a']
scheint einlist
, nicht eindict
, so ruftiteritems()
ist sehr verdächtig.Was Sie anscheinend gesucht haben, ist so etwas wie:
Druckt sowohl [
key-a
] Werte, die sich innerhalb der zwei dicts von der['lev-1a']
Liste. Gilt diese Antwort Ihre Frage überhaupt? Ich muss zugeben, ich bin nicht sicher, ich verstehe Ihre Frage. Fühlen Sie sich frei, zu aufwendig und ich werde es entsprechend Bearbeiten.