Một giải pháp tổng quát hơn xử lý các danh sách và danh sách lồng nhau sâu tùy ý sẽ là:
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
Điều này tạo ra đầu ra:
A
color : 2
speed : 70
B
color : 3
speed : 60
Tôi gặp phải một nhu cầu tương tự và phát triển một chức năng mạnh mẽ hơn như là một bài tập cho chính mình. Tôi bao gồm nó ở đây trong trường hợp nó có thể có giá trị cho người khác. Khi chạy nosetest, tôi cũng thấy hữu ích khi có thể chỉ định luồng đầu ra trong cuộc gọi để sys.stderr có thể được sử dụng thay thế.
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)
Sử dụng chức năng này, đầu ra của OP trông như thế này:
{
A:
{
color: 2
speed: 70
}
B:
{
color: 3
speed: 60
}
}
mà cá nhân tôi thấy là hữu ích và mô tả hơn.
Cho ví dụ ít tầm thường hơn về:
{"test": [{1:3}], "test2":[(1,2),(3,4)],"test3": {(1,2):['abc', 'def', 'ghi'],(4,5):'def'}}
Giải pháp yêu cầu của OP mang lại điều này:
test
1 : 3
test3
(1, 2)
abc
def
ghi
(4, 5) : def
test2
(1, 2)
(3, 4)
trong khi phiên bản 'nâng cao' mang lại điều này:
{
test:
[
{
1: 3
}
]
test3:
{
(1, 2):
[
abc
def
ghi
]
(4, 5): def
}
test2:
[
(1, 2)
(3, 4)
]
}
Tôi hy vọng điều này cung cấp một số giá trị cho người tiếp theo tìm kiếm loại chức năng này.