Если возможно, просто сгладьте путь:
data['w:x:y:z'] = {'a':5, 'b':10}
for path, d in data.items():
print '%s:%s' % (path, ':'.join("%s=%r" % pair for pair in d.items()))
Если глубина диктовки точно равна 4 во всех случаях, вы можете написать это:
for w, wvals in data.items():
for x, xvals in wvals.items():
for y, yvals in xvals.items():
for z, zvals in yvals.items():
print '%s:%s:%s:%s:%s' % (
w, x, y, z,
':'.join("%s=%r" % pair for pair in d.items()))
В противном случае вы должны прибегнуть к рекурсии.
def dump(data, path=''):
if isinstance(data, defaultdict):
for k, v in data.items():
dump(v, path + k + ":")
else:
print "%s%s" % (path, ':'.join("%s=%r" % pair for pair in d.items()))
dump(data)