def iteritems_recursive(d):
if isinstance(d, dict):
for k,v in d.iteritems():
for k1,v1 in iteritems_recursive(v):
yield (k,)+k1, v1
elif isinstance(d, list) or isinstance(d, tuple):
for k,v in enumerate(d):
for k1,v1 in iteritems_recursive(v):
yield (k,)+k1, v1
else:
yield (), d
from collections import OrderedDict
dic = {
u'resources': {
u'info': {
u'load': (u'37', u'17')},
u'peak': {
u'load': (u'0', u'1')}},
u'statistics': (
None,
OrderedDict([
(u'depth', u'0'),
(u'depth2', u'0'),
(u'depth3', u'0')]))}
for p,v in iteritems_recursive(dic):
print p, "->", v
ZGVmIGl0ZXJpdGVtc19yZWN1cnNpdmUoZCk6CiAgICBpZiBpc2luc3RhbmNlKGQsIGRpY3QpOgogICAgICAgIGZvciBrLHYgaW4gZC5pdGVyaXRlbXMoKToKICAgICAgICAgICAgZm9yIGsxLHYxIGluIGl0ZXJpdGVtc19yZWN1cnNpdmUodik6CiAgICAgICAgICAgICAgICB5aWVsZCAoaywpK2sxLCB2MQogICAgZWxpZiBpc2luc3RhbmNlKGQsIGxpc3QpIG9yIGlzaW5zdGFuY2UoZCwgdHVwbGUpOgogICAgICAgIGZvciBrLHYgaW4gZW51bWVyYXRlKGQpOgogICAgICAgICAgICBmb3IgazEsdjEgaW4gaXRlcml0ZW1zX3JlY3Vyc2l2ZSh2KToKICAgICAgICAgICAgICAgIHlpZWxkIChrLCkrazEsIHYxCiAgICBlbHNlOgogICAgICAgIHlpZWxkICgpLCBkCiAgCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CgpkaWMgPSB7CiAgICB1J3Jlc291cmNlcyc6IHsKICAgICAgICB1J2luZm8nOiB7CiAgICAgICAgICAgIHUnbG9hZCc6ICh1JzM3JywgdScxNycpfSwKICAgICAgICB1J3BlYWsnOiB7CiAgICAgICAgICAgIHUnbG9hZCc6ICh1JzAnLCB1JzEnKX19LAogICAgdSdzdGF0aXN0aWNzJzogKAogICAgICAgIE5vbmUsIAogICAgICAgIE9yZGVyZWREaWN0KFsKICAgICAgICAgICAgKHUnZGVwdGgnLCB1JzAnKSwKICAgICAgICAgICAgKHUnZGVwdGgyJywgdScwJyksCiAgICAgICAgICAgICh1J2RlcHRoMycsIHUnMCcpXSkpfQogICAgICAgICAgICAKZm9yIHAsdiBpbiBpdGVyaXRlbXNfcmVjdXJzaXZlKGRpYyk6CiAgcHJpbnQgcCwgIi0+Iiwgdg==
(u'statistics', 0) -> None
(u'statistics', 1, u'depth') -> 0
(u'statistics', 1, u'depth2') -> 0
(u'statistics', 1, u'depth3') -> 0
(u'resources', u'info', u'load', 0) -> 37
(u'resources', u'info', u'load', 1) -> 17
(u'resources', u'peak', u'load', 0) -> 0
(u'resources', u'peak', u'load', 1) -> 1