एक अधिक सामान्यीकृत समाधान जो मनमाने ढंग से गहरे घोंसले के शिकार और सूचियों को संभालता है:
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 >> 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)
इस फ़ंक्शन का उपयोग करते हुए, ओपी का आउटपुट इस तरह दिखता है:
{
A:
{
color: 2
speed: 70
}
B:
{
color: 3
speed: 60
}
}
जो मुझे व्यक्तिगत रूप से अधिक उपयोगी और वर्णनात्मक लगा।
थोड़ा कम तुच्छ उदाहरण दिया:
{"test": [{1:3}], "test2":[(1,2),(3,4)],"test3": {(1,2):['abc', 'def', 'ghi'],(4,5):'def'}}
ओपी का अनुरोधित समाधान यह पैदावार देता है:
test
1 : 3
test3
(1, 2)
abc
def
ghi
(4, 5) : def
test2
(1, 2)
(3, 4)
जबकि 'वर्धित' संस्करण इससे उपज देता है:
{
test:
[
{
1: 3
}
]
test3:
{
(1, 2):
[
abc
def
ghi
]
(4, 5): def
}
test2:
[
(1, 2)
(3, 4)
]
}
मुझे उम्मीद है कि यह इस प्रकार की कार्यक्षमता की तलाश में अगले व्यक्ति को कुछ मूल्य प्रदान करता है।