如何在Python中漂亮地打印深度为~4的字典?我尝试用pprint()进行漂亮的打印,但它不起作用:
import pprint
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(mydict)
我只是想要一个缩进(“\t”)为每个嵌套,这样我就会得到这样的东西:
key1
value1
value2
key2
value1
value2
等。
我该怎么做呢?
如何在Python中漂亮地打印深度为~4的字典?我尝试用pprint()进行漂亮的打印,但它不起作用:
import pprint
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(mydict)
我只是想要一个缩进(“\t”)为每个嵌套,这样我就会得到这样的东西:
key1
value1
value2
key2
value1
value2
等。
我该怎么做呢?
当前回答
我只是在得到某事物的答案并做了一个很小但非常有用的修改之后回到这个问题。该函数打印JSON树中的所有键以及该树中叶节点的大小。
def print_JSON_tree(d, indent=0):
for key, value in d.iteritems():
print ' ' * indent + unicode(key),
if isinstance(value, dict):
print; print_JSON_tree(value, indent+1)
else:
print ":", str(type(d[key])).split("'")[1], "-", str(len(unicode(d[key])))
当您有大型JSON对象并想要找出肉在哪里时,这非常好。例子:
>>> print_JSON_tree(JSON_object)
key1
value1 : int - 5
value2 : str - 16
key2
value1 : str - 34
value2 : list - 5623456
这将告诉您,您所关心的大部分数据可能在JSON_object['key1']['key2']['value2']中,因为该值格式化为字符串的长度非常大。
其他回答
我必须传递默认参数,就像这样:
print(json.dumps(my_dictionary, indent=4, default=str))
如果你想要键排序,你可以这样做:
print(json.dumps(my_dictionary, sort_keys=True, indent=4, default=str))
为了修复此类型错误:
TypeError: Object of type 'datetime' is not JSON serializable
这是由于datetimes是字典中的一些值。
我用了你们教我的东西加上装饰器的力量来重载经典的打印功能。只要根据需要改变缩进即可。我把它作为一个主旨在github,以防你想要星(保存)它。
def print_decorator(func):
"""
Overload Print function to pretty print Dictionaries
"""
def wrapped_func(*args,**kwargs):
if isinstance(*args, dict):
return func(json.dumps(*args, sort_keys=True, indent=2, default=str))
else:
return func(*args,**kwargs)
return wrapped_func
print = print_decorator(print)
现在就像往常一样使用打印。
我把sth的答案稍微修改一下,以适应我的嵌套字典和列表的需要:
def pretty(d, indent=0):
if isinstance(d, dict):
for key, value in d.iteritems():
print '\t' * indent + str(key)
if isinstance(value, dict) or isinstance(value, list):
pretty(value, indent+1)
else:
print '\t' * (indent+1) + str(value)
elif isinstance(d, list):
for item in d:
if isinstance(item, dict) or isinstance(item, list):
pretty(item, indent+1)
else:
print '\t' * (indent+1) + str(item)
else:
pass
然后输出如下:
>>>
xs:schema
@xmlns:xs
http://www.w3.org/2001/XMLSchema
xs:redefine
@schemaLocation
base.xsd
xs:complexType
@name
Extension
xs:complexContent
xs:restriction
@base
Extension
xs:sequence
xs:element
@name
Policy
@minOccurs
1
xs:complexType
xs:sequence
xs:element
...
我尝试了以下方法,得到了我想要的结果
方法1: 步骤1:在cmd中输入以下命令安装print_dict
pip install print_dict
步骤2:导入print_dict as
from print_dict import pd
步骤3:使用pd打印
pd(your_dictionary_name)
示例输出:
{
'Name': 'Arham Rumi',
'Age': 21,
'Movies': ['adas', 'adfas', 'fgfg', 'gfgf', 'vbxbv'],
'Songs': ['sdfsd', 'dfdgfddf', 'dsdfd', 'sddfsd', 'sdfdsdf']
}
方法2: 我们也可以使用for循环来使用items方法打印字典
for key, Value in your_dictionary_name.items():
print(f"{key} : {Value}")
例如,Pout可以漂亮地打印你扔给它的任何东西(借用另一个答案的数据):
data = {'a':2, 'b':{'x':3, 'y':{'t1': 4, 't2':5}}}
pout.vs(data)
将导致输出打印到屏幕上:
{
'a': 2,
'b':
{
'y':
{
't2': 5,
't1': 4
},
'x': 3
}
}
或者你可以返回对象的格式化字符串输出:
v = pout.s(data)
它的主要用途是调试,因此它不会阻塞对象实例或任何东西,它处理unicode输出,如你所期望的,在python 2.7和3中工作。
披露:我是撅嘴的作者和维护者。