Python Zugriff auf einen Dict im Dict?

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
565
Hallo zusammen,

ich versuche gerade ein multidimensionales Dict erzeugen.
Wie erzeuge ich dieses?
Code:
    def set_status(self, env, name, clone, url, status, version):
        if status is not "ok":
            if env not in self.__statusarray:
                self.__statusarray.setdefault(env, [])

            x = {u'name': name, 'values': {u'clone': clone, u'status': status, u'url': url, u'version': version}}
            self.__statusarray[env].append(x)

Mein Problem ist nun:
Code:
        for env in sorted(self.__statusarray.keys()):
            for data in sorted(self.__statusarray[env]):
                for value in data.get('values'):
                    print(env, data.get('name'), value.get('clone'), value.get('status'))

Ich komme nicht an values heran.

Code:
Traceback (most recent call last):
  ...
AttributeError: 'unicode' object has no attribute 'get'

Hat jemand vielleicht eine Idee bzw. einen Hinweiß was ich besser machen kann?
 
Das Problem liegt in
Code:
for value in data.get('values'):

data.get('values') liefert ein Dictionary zurück. wendet man darauf ein "for" an so iteriert man über alle Keys. Die Keys sind in diesem Fall alles Strings ('clone', 'status', 'url' und 'version').

Ein value.get('clone') versucht nun deshalb ein "get" auf einen String - was mit "AttributeError: 'unicode' object has no attribute 'get'" fehlschlägt.

Das
Code:
for value in data.get('values'):
sollte unnötig sein; bringt
Code:
for env in sorted(self.__statusarray):
  for data in self.__statusarray[env]:
    print (env, data.get('name'), data.get('values').get('clone'), data.get('values').get('status'))
das gewünschte Ergebnis?
 
Zurück
Oben