处理任意深度嵌套的dict和list的更通用的解决方案是:def dumpclean(obj):
if isinstance(obj, dict):
for k, v in obj.items():
if hasattr(v, '__iter__'):
print k
dumpclean(v)
else:
print '%s : %s' % (k, v)
elif isinstance(obj, list):
for v in obj:
if hasattr(v, '__iter__'):
dumpclean(v)
else:
print v
else:
print obj
这将产生输出:A
color : 2
speed : 70
B
color : 3
speed : 60
我遇到了类似的需求,并开发了一个更健壮的函数作为自己的练习。我把它放在这里,以防对别人有价值。在运行nosetest时,我还发现能够在调用中指定输出流以便可以使用sys.stderr也很有帮助。import sys
def dump(obj, nested_level=0, output=sys.stdout):
spacing = ' '
if isinstance(obj, dict):
print >> output, '%s{' % ((nested_level) * spacing)
for k, v in obj.items():
if hasattr(v, '__iter__'):
print >> out