Eine allgemeinere Lösung, die willkürlich tief verschachtelte Dikte und Listen behandelt, wäre:
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
Dies erzeugt die Ausgabe:
A
color : 2
speed : 70
B
color : 3
speed : 60
Ich hatte ein ähnliches Bedürfnis und entwickelte eine robustere Funktion als Übung für mich. Ich füge es hier ein, falls es für einen anderen von Wert sein kann. Beim Ausführen von nosetest fand ich es auch hilfreich, den Ausgabestream im Aufruf angeben zu können, damit stattdessen sys.stderr verwendet werden kann.
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 >> output, '%s%s:' % ((nested_level + 1) * spacing, k)
dump(v, nested_level + 1, output)
else:
print >> output, '%s%s: %s' % ((nested_level + 1) * spacing, k, v)
print >> output, '%s}' % (nested_level * spacing)
elif isinstance(obj, list):
print >> output, '%s[' % ((nested_level) * spacing)
for v in obj:
if hasattr(v, '__iter__'):
dump(v, nested_level + 1, output)
else:
print >> output, '%s%s' % ((nested_level + 1) * spacing, v)
print >> output, '%s]' % ((nested_level) * spacing)
else:
print >> output, '%s%s' % (nested_level * spacing, obj)
Mit dieser Funktion sieht die Ausgabe des OP folgendermaßen aus:
{
A:
{
color: 2
speed: 70
}
B:
{
color: 3
speed: 60
}
}
was ich persönlich als nützlicher und beschreibender empfand.
Angesichts des etwas weniger trivialen Beispiels von:
{"test": [{1:3}], "test2":[(1,2),(3,4)],"test3": {(1,2):['abc', 'def', 'ghi'],(4,5):'def'}}
Die vom OP angeforderte Lösung ergibt Folgendes:
test
1 : 3
test3
(1, 2)
abc
def
ghi
(4, 5) : def
test2
(1, 2)
(3, 4)
wohingegen die "erweiterte" Version dies ergibt:
{
test:
[
{
1: 3
}
]
test3:
{
(1, 2):
[
abc
def
ghi
]
(4, 5): def
}
test2:
[
(1, 2)
(3, 4)
]
}
Ich hoffe, dies bietet der nächsten Person, die nach dieser Art von Funktionalität sucht, einen gewissen Wert.