如何在iPython中美观地打印字典

2024-10-02 10:22:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在使用的是ReinstDB,它有一个很好的web UI和一个Data Explorer,它允许用户像这样打印出数据库的内容:

enter image description here

请注意,每个键值对从一个新行开始,并且键和值(大多数)有不同的颜色。如果我用不清楚的打印出来的话

enter image description here

如果我遍历光标并print每一项,这会稍微有所改善,如下所示:

enter image description here

但是,这需要更多的输入,而且看起来仍然不如rejectdbwebui好。我可以安装iPython插件来改善打印输出的外观吗?在

(我看了一下pprint,但这似乎只控制文本的位置,而不是它的颜色)。在


Tags: 用户插件web数据库ui内容data颜色
2条回答

如果将关键字参数time_format="raw"添加到reinstdb的run()命令,则mhawke的答案有效。(否则,您将得到一个TypeError,因为ReinstDB包含时区的对象不是JSON可序列化的)。结果如下:

enter image description here

更清晰。一个小小的缺点是epoch_time比原来的时间格式更难解释。在

您可以使用^{}

import json 

for row in r.db(....).run(conn):
    print(json.dumps(row, indent=4))

尽管这并没有按排序的顺序显示键,但它可能已经足够满足您的需要了。正如@coder指出的那样,json.dumps()可以通过指定sort_keys=True参数对键进行排序。在

^{pr2}$

也可以直接打印对象(尚未测试):

print(json.dumps(r.db(....).run(conn), indent=4, sort_keys=True)

也可能打印出周围的“list”对象。在


要处理不支持序列化为JSON的对象,可以使用自定义的^{}。下面是一个处理datetime.datetime对象的示例:

from datetime import datetime

class DateTimeAwareJSONEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            tz = obj.tzname()
            return obj.ctime() + (' {}'.format(tz) if tz else '')
        return super(DateTimeAwareJSONEncoder, self).default(obj)

for row in r.db(....).run(conn):
    print(json.dumps(row, indent=4, sort_keys=True, cls=DateTimeAwareJSONEncoder))

您可以根据需要使用^{}格式化日期时间字符串。在

相关问题 更多 >

    热门问题